Single sign on 更快:使用Twitter应用程序进行身份验证

Single sign on 更快:使用Twitter应用程序进行身份验证,single-sign-on,twitter-oauth,swifter,Single Sign On,Twitter Oauth,Swifter,我正在使用Swifter对使用SSO的用户进行身份验证。Swifter生成以下URL(已删除密钥): 然而,当Twitter打开时,只显示普通的应用程序,没有任何验证的机会。这里缺少什么吗?我将演示如何(在2021年)不必每次都登录。请按照以下步骤操作(用您的应用程序名替换您的应用程序名): 在twitter开发者门户的“身份验证设置”下,将YOURAPPNAME://添加为回调URL。为此,需要启用3腿OAuth,并将其添加到回调URL中。您还需要输入网站URL,但它可以是任何内容(我有)

我正在使用Swifter对使用SSO的用户进行身份验证。Swifter生成以下URL(已删除密钥):

然而,当Twitter打开时,只显示普通的应用程序,没有任何验证的机会。这里缺少什么吗?

我将演示如何(在2021年)不必每次都登录。请按照以下步骤操作(用您的应用程序名替换您的应用程序名):

  • 在twitter开发者门户的“身份验证设置”下,将YOURAPPNAME://添加为回调URL。为此,需要启用3腿OAuth,并将其添加到回调URL中。您还需要输入网站URL,但它可以是任何内容(我有)

  • 在播客文件中,确保有以下行:

  • 不要只使用pod“Swifter”,因为还有另一个名为Swifter的项目不是mattdonnelly做的,也不会起作用

  • 在项目浏览器中单击项目,选择“信息”选项卡。在底部,您将看到URL类型。展开它并单击加号。在URL方案中输入YOURAPPNAME(如果您的应用程序名称为“demoApp”,则输入demoApp而不是demoApp://
  • 如果您的应用程序代理尚未在您的应用程序代理中使用开放url功能(标准为否,但我的是因为我有谷歌登录,在我的情况下,我不需要做任何事情),请导入Swifter,并添加此功能:
  • 在视图控制器中,您需要首先授权twitter,然后可以执行任何操作(推特、查找提要等)。您可以使用swifter.authorize来执行此操作,它会打开浏览器。对于那些在第一次使用后不需要此功能的用户,这就是swifter.verifyAccountCredentials的作用。要查找消费者密钥和消费者密钥,请转到twitter开发者门户的密钥和令牌区域
  • 我将演示如何(在2021年)无需每次登录。请按照以下步骤操作(用您的应用程序名替换您的应用程序名):

  • 在“身份验证设置”下,将YOURAPPNAME://添加为twitter开发者门户上的回调URL。为此,您需要启用3腿OAuth,并将其添加到回调URL中。您还需要输入网站URL,但它可以是任何内容(我有)

  • 在播客文件中,确保有以下行:

  • 不要只使用pod“Swifter”,因为还有另一个名为Swifter的项目不是mattdonnelly做的,也不会起作用

  • 在项目资源管理器中单击您的项目,选择“信息”选项卡。在底部,您将看到URL类型。展开它并单击加号。在URL方案中输入YOURAPPNAME(如果您的应用名称为“demoApp”,则输入demoApp而非demoApp://
  • 如果您的应用程序代理尚未在您的应用程序代理中使用开放url功能(标准为否,但我的是因为我有谷歌登录,在我的情况下,我不需要做任何事情),请导入Swifter,并添加此功能:
  • 在视图控制器中,您需要首先授权twitter,然后可以执行任何操作(推特、查找提要等)。您可以使用swifter.authorize来执行此操作,它会打开浏览器。对于那些在第一次使用后不需要此功能的用户,这就是swifter.verifyAccountCredentials的作用。要查找消费者密钥和消费者密钥,请转到twitter开发者门户的密钥和令牌区域
  • let url = URL(string:"twitterauth://authorize?consumer_key=[KEY]&consumer_secret=[SECRET]&oauth_callback=swifter-[KEY]")!
    
    UIApplication.shared.open(url, options: [:], completionHandler: { (success) in
    
    pod 'Swifter' , :git => 'https://github.com/mattdonnelly/Swifter.git'
    
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
            
        Swifter.handleOpenURL(url, callbackURL: URL(string: "YOURAPPNAME://")!)
            
        return true
    }
    
    import Swifter
    import AuthenticationServices
    
    class ViewController: UIViewController, ASWebAuthenticationPresentationContextProviding {
        func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor {
            return self.view.window!
        }
        
        var swifter: Swifter!
        
        override func viewDidLoad() {
            super.viewDidLoad()
            if UserDefaults.standard.string(forKey: "twitterOAuthToken") == nil {
                swifter = Swifter(consumerKey: CONSUMER_KEY, consumerSecret: CONSUMER_SECRET)
                if let url = URL(string: "YOURAPPNAME://") {
                    swifter.authorize(withProvider: self, callbackURL: url) { (token, response) in
                        UserDefaults.standard.set(token?.key, forKey: "twitterOAuthToken")
                        UserDefaults.standard.set(token?.secret, forKey: "twitterOAuthSecret")
                        print("signed in!!")
                    }
                }
                
            } else {
                swifter = Swifter(consumerKey: CONSUMER_KEY, consumerSecret: CONSUMER_SECRET, oauthToken: UserDefaults.standard.string(forKey: "twitterOAuthToken") ?? "", oauthTokenSecret: UserDefaults.standard.string(forKey: "twitterOAuthSecret") ?? "")
                swifter.verifyAccountCredentials(includeEntities: nil, skipStatus: nil, includeEmail: nil) { (json) in
                    print("signed in!")
                } failure: { (error) in
                    self.swifter = Swifter(consumerKey: CONSUMER_KEY, consumerSecret: CONSUMER_SECRET)
                    if let url = URL(string: "YOURAPPNAME://") {
                        self.swifter.authorize(withProvider: self, callbackURL: url) { (token, response) in
                            UserDefaults.standard.set(token?.key, forKey: "twitterOAuthToken")
                            UserDefaults.standard.set(token?.secret, forKey: "twitterOAuthSecret")
                            print("signed in!!")
                        }
                    }
                }
            }
            
            
            
           let button = UIButton()
            button.layer.backgroundColor = #colorLiteral(red: 0.8078431487, green: 0.02745098062, blue: 0.3333333433, alpha: 1)
            button.frame = CGRect(x: 200, y:0, width: 200, height: 200)
            button.center = view.center
            button.addTarget(self, action: #selector(tweet), for: .touchUpInside)
            view.addSubview(button)
    
        }
        
        @objc func tweet() {
            swifter.postTweet(status: "wild") { (json) in
                print("tweeted!")
            } failure: { (error) in
                print("tweet failed")
            }
        }
    }