[英]How to integrate third-party authentication(except facebook and twitter) in ios native app in Parse?
I'm using Parse.com, I'd like to integrate third-party authentication( except facebook and twitter), Sina weibo for example, I found no way to achieve this: 我正在使用Parse.com,我想集成第三方身份验证(除了Facebook和Twitter),例如新浪微博,我发现没有办法实现此目标:
After my app authenticated by Sina Weibo App, I got an uid and an access token, First I query the uid in Parse data, if not found, I signup with a random username and password, then my PFUser.currentUser() is not nil 我的应用程序通过新浪微博应用程序验证后,我得到了一个uid和一个访问令牌,首先我在Parse数据中查询uid,如果找不到,我使用随机的用户名和密码进行注册,那么我的PFUser.currentUser()不为nil
while what if the uid exist? 而如果uid存在怎么办? how to become a user now?
现在如何成为用户?
Here is my code: 这是我的代码:
func upsertUser(userInfo: ISSPlatformUser!){
var query = PFQuery(className: "TokenStorage")
query.whereKey("wb_uid", equalTo: userInfo.uid())
query.findObjectsInBackgroundWithBlock({
(objects: [AnyObject]!, error: NSError!) in
println(objects)
if( objects.count == 0 ){
println("this account not register ")
self.newUser(userInfo)
}else{
println("already register")
var tokenData = objects[0] as PFObject
var user = tokenData.objectForKey("user") as PFUser
var accessToken = userInfo.credential().token()
println("accessToken:" + accessToken)
println("user:")
println(user)
if accessToken != tokenData.objectForKey("accessToken") as NSString {
tokenData.setObject(accessToken, forKey: "accessToken")
}
tokenData.saveInBackgroundWithBlock({
(succeed: Bool!, error: NSError!) in
if succeed! {
var sessionToken = user.sessionToken
println("sessionToken:")
println(sessionToken)
println("currentUser:")
println(PFUser.currentUser() )
PFUser.becomeInBackground(sessionToken, block: nil)
}
})
}
})
}
func newUser(userInfo: ISSPlatformUser!){
println("new user ")
var user = PFUser()
var s = NSMutableData(length: 24)!
SecRandomCopyBytes(kSecRandomDefault, UInt(s.length), UnsafeMutablePointer<UInt8>(s.mutableBytes))
let base64str = s.base64EncodedStringWithOptions(NSDataBase64EncodingOptions.allZeros)
user.username = "wb_" + userInfo.uid()
user.password = base64str
user.signUpInBackgroundWithBlock({
(succeed: Bool!, error: NSError!) in
if succeed! {
var ts = PFObject(className: "TokenStorage")
ts.setObject(userInfo.uid(), forKey: "wb_uid")
ts.setObject(userInfo.credential().token(), forKey: "accessToken")
ts.setObject(user, forKey: "user")
var acl = PFACL()
acl.setPublicReadAccess(true)
acl.setPublicWriteAccess(false)
ts.ACL = acl
ts.saveInBackgroundWithBlock(nil)
}
})
}
The session token is nil that can not become a user, which make me frustrated. 会话令牌为nil,无法成为用户,这使我感到沮丧。
One solution could be to sign up your user with a password you know. 一种解决方案是用您知道的密码注册用户。 For instance, to create a unique password per user, you can encode the userInfo.uid() with a constant string you keep safe.
例如,要为每个用户创建唯一的密码,可以使用安全的常量字符串对userInfo.uid()进行编码。
This way, if you find that a user is already registered, you can log in with username/password. 这样,如果您发现用户已经注册,则可以使用用户名/密码登录。
Let us know if you found a better solution. 让我们知道您是否找到了更好的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.