加了确认弹窗并支持取消,加了轮询频率,加了一些兜底
This commit is contained in:
@@ -503,6 +503,9 @@ NextInner:
|
|||||||
'无 RefreshToken
|
'无 RefreshToken
|
||||||
Relogin:
|
Relogin:
|
||||||
Dim OAuthCode As String = MsLoginStep1(Data, ClientId)
|
Dim OAuthCode As String = MsLoginStep1(Data, ClientId)
|
||||||
|
If OAuthCode = "Cancel" Then
|
||||||
|
Exit Sub
|
||||||
|
End If
|
||||||
If Data.IsAborted Then Throw New ThreadInterruptedException
|
If Data.IsAborted Then Throw New ThreadInterruptedException
|
||||||
Data.Progress = 0.2
|
Data.Progress = 0.2
|
||||||
OAuthTokens = MsLoginStep2(OAuthCode, False, ClientId)
|
OAuthTokens = MsLoginStep2(OAuthCode, False, ClientId)
|
||||||
@@ -511,6 +514,7 @@ Relogin:
|
|||||||
OAuthTokens = MsLoginStep2(Input.OAuthRefreshToken, True, ClientId)
|
OAuthTokens = MsLoginStep2(Input.OAuthRefreshToken, True, ClientId)
|
||||||
End If
|
End If
|
||||||
'要求重新打开登录网页认证
|
'要求重新打开登录网页认证
|
||||||
|
If OAuthTokens(0) = "Cancel" Then Exit Sub
|
||||||
If OAuthTokens(0) = "Relogin" Then GoTo Relogin
|
If OAuthTokens(0) = "Relogin" Then GoTo Relogin
|
||||||
Data.Progress = 0.35
|
Data.Progress = 0.35
|
||||||
If Data.IsAborted Then Throw New ThreadInterruptedException
|
If Data.IsAborted Then Throw New ThreadInterruptedException
|
||||||
@@ -800,6 +804,7 @@ LoginFinish:
|
|||||||
|
|
||||||
'微软登录步骤 1:获取 DeviceCode 并显示验证提示
|
'微软登录步骤 1:获取 DeviceCode 并显示验证提示
|
||||||
Private Function MsLoginStep1(Data As LoaderTask(Of McLoginMs, McLoginResult), ClientId As String) As String
|
Private Function MsLoginStep1(Data As LoaderTask(Of McLoginMs, McLoginResult), ClientId As String) As String
|
||||||
|
If MyMsgBox("请在打开的网页里输入 PCL2 提供的设备代码(会自动复制到剪贴板)并登录微软账户,然后允许 PCL2 访问相关信息。" & vbCrLf & "设备代码有时效性,若操作时间过长需要重新进行登录流程。", "正版验证确认", "继续", "取消") = 1 Then
|
||||||
McLaunchLog("开始微软登录步骤 1")
|
McLaunchLog("开始微软登录步骤 1")
|
||||||
|
|
||||||
Dim DeviceCode As String
|
Dim DeviceCode As String
|
||||||
@@ -816,8 +821,12 @@ LoginFinish:
|
|||||||
ExpiresIn = ResultJson("expires_in")
|
ExpiresIn = ResultJson("expires_in")
|
||||||
ClipboardSet(UserCode)
|
ClipboardSet(UserCode)
|
||||||
OpenWebsite(VerifyUri)
|
OpenWebsite(VerifyUri)
|
||||||
MyMsgBox("请在打开的网页里输入 PCL2 提供的设备代码(已经复制到剪贴板)并登录微软账户,然后允许 PCL2 访问相关信息。" & vbCrLf & "设备代码有时效性,若操作时间过长需要重新进行登录流程。" & vbCrLf & vbCrLf & "本次验证的设备代码为:" & UserCode & vbCrLf & vbCrLf & "你也可以在任意设备上打开下列网址进行验证:" & vbCrLf & VerifyUri & vbCrLf & vbCrLf & "请在完成后点击继续。", "正版验证", "继续")
|
|
||||||
|
MyMsgBox("本次验证的设备代码为:" & UserCode & vbCrLf & vbCrLf & "你也可以在任意设备上打开下列网址进行验证:" & vbCrLf & VerifyUri & vbCrLf & vbCrLf & "请在完成后点击继续。", "正版验证", "继续")
|
||||||
Return DeviceCode
|
Return DeviceCode
|
||||||
|
Else
|
||||||
|
Return "Cancel"
|
||||||
|
End If
|
||||||
End Function
|
End Function
|
||||||
|
|
||||||
'微软登录步骤 2:从 OAuth Code 或 OAuth RefreshToken 获取 {OAuth AccessToken, OAuth RefreshToken}
|
'微软登录步骤 2:从 OAuth Code 或 OAuth RefreshToken 获取 {OAuth AccessToken, OAuth RefreshToken}
|
||||||
@@ -847,9 +856,11 @@ LoginFinish:
|
|||||||
If ex.Message.Contains("must sign in again") OrElse ex.Message.Contains("invalid_grant") Then '#269
|
If ex.Message.Contains("must sign in again") OrElse ex.Message.Contains("invalid_grant") Then '#269
|
||||||
Return {"Relogin", ""}
|
Return {"Relogin", ""}
|
||||||
ElseIf ex.Message.Contains("authorization_declined") Then
|
ElseIf ex.Message.Contains("authorization_declined") Then
|
||||||
Hint("你取消了验证过程!")
|
Hint("你拒绝了 PCL2 的访问权限申请,验证过程被中断!")
|
||||||
|
Return {"Cancel", ""}
|
||||||
ElseIf ex.Message.Contains("expired_token") Then
|
ElseIf ex.Message.Contains("expired_token") Then
|
||||||
Hint("Token 已过期,请尝试重新验证!")
|
Hint("Token 已过期,请尝试重新验证!")
|
||||||
|
Exit While
|
||||||
ElseIf ex.Message.Contains("AADSTS70016") Then
|
ElseIf ex.Message.Contains("AADSTS70016") Then
|
||||||
Continue While
|
Continue While
|
||||||
Else
|
Else
|
||||||
@@ -863,9 +874,12 @@ LoginFinish:
|
|||||||
Dim RefreshToken As String = ResultJson("refresh_token").ToString
|
Dim RefreshToken As String = ResultJson("refresh_token").ToString
|
||||||
Return {AccessToken, RefreshToken}
|
Return {AccessToken, RefreshToken}
|
||||||
End If
|
End If
|
||||||
|
|
||||||
|
Thread.Sleep(1000)
|
||||||
End While
|
End While
|
||||||
|
|
||||||
Hint("验证超时,请尝试重新验证!")
|
Hint("验证超时,请尝试重新验证!")
|
||||||
|
Return {"Cancel", ""}
|
||||||
|
|
||||||
End Function
|
End Function
|
||||||
'微软登录步骤 3:从 OAuth AccessToken 获取 XBLToken
|
'微软登录步骤 3:从 OAuth AccessToken 获取 XBLToken
|
||||||
|
|||||||
Reference in New Issue
Block a user