Single sign on 更快:使用Twitter应用程序进行身份验证
我正在使用Swifter对使用SSO的用户进行身份验证。Swifter生成以下URL(已删除密钥): 然而,当Twitter打开时,只显示普通的应用程序,没有任何验证的机会。这里缺少什么吗?我将演示如何(在2021年)不必每次都登录。请按照以下步骤操作(用您的应用程序名替换您的应用程序名):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,但它可以是任何内容(我有)
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")
}
}
}