我可以创建一个帐户并通过 Twitter 登录;但是,每次尝试登录时,用户都会被带到一个 Twitter 网页,他们必须在该网页上使用其凭据登录。鉴于这种情况每次都会发生,它否定了这种社交登录的值(value)。我的 Facebook 和 Google 登录在 Firebase 上没有这个问题。以下是用于登录的代码:
private func loginWithTwitter() {
TWTRTwitter.sharedInstance().logIn { (session, error) in
guard error == nil && session != nil else {
self.spinner.dismiss()
Utilities.displayAlert(title: "Login Error", msg: error?.localizedDescription ?? "Could not login with Twitter at this time.", controller: self)
return
}
let credential = TwitterAuthProvider.credential(withToken: session!.authToken, secret: session!.authTokenSecret)
Auth.auth().signInAndRetrieveData(with: credential, completion: { (result, error) in
if let error = error {
self.spinner.dismiss()
self.present(self.sharedManager.getAlertWith(title: "Login Error", andMsg: error.localizedDescription), animated: true)
return
}
self.loadUserInfo()
})
}
}
我还应该补充一点,我确实在 Twitter 开发者页面上选中了用于登录的复选框。
更新:
基于下面 Pratik 的帖子,这里是一个看起来确实有效的修改版本。但是,我不确定这是否是正确的长期答案。例如,我想知道 token 是否过期。想一想是否有比这更好的方法?
private func loginWithTwitter() {
let token = TWTRTwitter.sharedInstance().sessionStore.session()?.authToken
let secret = TWTRTwitter.sharedInstance().sessionStore.session()?.authTokenSecret
guard token != nil && secret != nil else {
self.present(self.sharedManager.getAlertWith(title: "Login Error", andMsg: "Could not login with Twitter. Please try again."), animated: true)
return
}
let credential = TwitterAuthProvider.credential(withToken: token!, secret: secret!)
Auth.auth().signInAndRetrieveData(with: credential, completion: { (result, error) in
if let error = error {
self.spinner.dismiss()
self.present(self.sharedManager.getAlertWith(title: "Login Error", andMsg: error.localizedDescription), animated: true)
return
}
self.loadUserInfo()
})
}
最佳答案
我不确定是否有帮助,但我在我的应用程序中使用 Twitter 登录,一旦我使用 Twitter 进行身份验证,我就使用下面的函数来让用户再次打开应用程序进行验证。
func silentLoginWithTwitter()
{
let client = TWTRAPIClient.withCurrentUser()
let request = client.urlRequest(withMethod: "GET", urlString: "https://api.twitter.com/1.1/account/verify_credentials.json", parameters: ["include_email": "true", "skip_status": "true"], error: nil)
client.sendTwitterRequest(request, completion: { (response:URLResponse?, data:Data?, error:Error?) in
if error == nil
{
// Open main page of application
}else
{
print("Error: Twitter : \(String(describing: error))")
// Open Login page again
}
})
}
或者您可以检查 session 身份验证
if let authSession = TWTRTwitter.sharedInstance().sessionStore.session()?.authToken {
TWTRTwitter.sharedInstance().sessionStore.isValidOauthToken(authSession)
}
希望对你有帮助
关于swift - iOS Firebase Twitter 登录每次都需要权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52325424/