swift - iOS Firebase Twitter 登录每次都需要权限

标签 swift firebase-authentication

我可以创建一个帐户并通过 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/

相关文章:

Swift 2.2 递减特定于 Swift 3 中的循环

ios - 每周自动更新标签

firebase - 使用 Firebase OpenID Connect 提供程序作为 Azure Function App 身份提供程序

Firebase Facebook 身份验证 : email verified always false

javascript - Firestore 规则 - 动态路径

swift - Firebase 中的唯一用户名

ios - Swift UIActivityViewController Image&Url Share 不适用于 FB

用于随机数的 Swift 2.0 计时器

ios - 淡化状态栏文本而不删除状态栏本身

ios - 设备上未验证的电子邮件 (Firebase)