注意:此答案不适用于开源解析服务器,因为它仅使用可撤销会话。查看解析服务器/问题/1392进一步更新
更新(2016 年 1 月):
你需要关闭可撤销的会话为了打电话getSessionToken
on Parse.User
. Go to 应用程序设置>>Users>> 关闭需要可撤销的会话。这在 2016 年并不是什么新鲜事,但在给出答案时,作者并不知道这一变化。
为了便于理解,我将分为两种情况:新用户和老用户。
1. 新用户
流程如下:
- 用户授权并获取token
- 我们使用随机密码创建一个新用户
您可以使用以下代码创建一个 ParseUsernewChooseAccountIntent()
返回电子邮件的方法。
ParseUser user = new ParseUser();
user.setUsername(mEmail);
user.setPassword(randomPassword);
user.setEmail(mEmail);
user.signUpInBackground(new SignUpCallback() {
public void done(ParseException e) {
if (e == null) {
// Hooray! Let them use the app now.
} else {
// Sign up didn't succeed. Look at the ParseException
// to figure out what went wrong
}
}
});
2.回访用户
正如我在互联网上研究的那样,这是大多数人陷入困境的地方。流程如下:
- 用户授权,应用程序获得令牌
- 我们将此令牌传递给 Cloud Code 进行验证。我们需要检查此令牌是否由 Google 签名以及它是否适合我们(android-开发者(2013))。
- 验证令牌有效后,您可以使用以下命令在 Cloud Code 中查询用户
Parse.Cloud.useMasterKey()
方法并使用返回会话密钥getSessionToken()
方法对查询结果进行处理。
- 使用会话密钥通过调用将登录状态保存在磁盘上
becomeInBackground
method
验证令牌, 你可以发送Parse.Cloud.httprequest
到这个端点:https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=
。这是在中指示的谷歌身份文档。您将收到如下数据:
{
"iss": "https://accounts.google.com",
"sub": "110169484474386276334",
"azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
"email": "[email protected]",
"at_hash": "X_B3Z3Fi4udZ2mf75RWo3w",
"email_verified": "true",
"aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
"iat": "1433978353",
"exp": "1433981953"
}
需要比较的是“aud”、“azp”和“email”,它们被翻译为受众、授权方和电子邮件。
在 Cloud Code 上查询当前用户:
var query = new Parse.Query(Parse.User);
query.equalTo("email",mEmail);
query.first({
success: function(user) {
// Use user..getSessionToken() to get a session token
},
error: function(user, error) {
//
},
useMasterKey: true
});
Note:确保您具有以下范围,以便在您检查 Cloud Code 时显示电子邮件:https://www.googleapis.com/auth/plus.profile.emails.read