如何在Android上的Parse后端链接Google +登录用户?

Rah*_*ani 22 android google-login parse-platform google-plus-signin

我已经在我的Android应用程序中使用Parse 3个月了.现在我想在应用程序中添加电子邮件登录和社交登录(Facebook和Google+).我已经成功添加了电子邮件和fb登录,用户可以连接电子邮件或Facebook中的任何一个或其中一个,该应用程序将识别用户.

例如,如果我通过电子邮件登录,然后连接Facebook,使用其他设备上的应用程序,通过Facebook登录,该应用程序将知道它是相同的用户,并将为我自定义,并将显示我的数据.电子邮件也有效.

我已为Android添加了Google+登录信息,但我无法将用户的Google+凭据与登录用户相关联.

Parse Users表有一个authData字段,它获取facebook auth数据并获得Twitter以及这两个登录都被解压缩到Parse SDK中.

什么应该是最好的事情为Google+?我对数据库设计以及如何连接使用Google+登录的用户感到困惑?

如果用户只是通过Google+登录该怎么办?如何在Parse上创建解析用户并对用户进行身份验证?

我对云代码和Android很满意,并且非常感谢某些帮助/说明只是让我朝着正确的方向前进.我从来没有使用OAuth2和Parse登录电子邮件和社交登录,我认为我不应该进入它.但如果我错了,请告诉我.

谢谢!

更新:我已经阅读了很多关于解析问题的问题,并且已经多次检查了这个方法(因为我一直认为我在读完之后错过了一些东西).检查这个问题 - 我目前处于相同的情况.

我有:
1.已实施Google+登录
.2.使用GoogltAuthUtil获取访问令牌.

坚持:
3.用户使用Google+登录后如何链接当前登录的Parse用户?
4.如果Google+是用户的第一个(也是唯一的)登录选项,如何创建新的Parse用户?

Ral*_*ius 7

这似乎与如何从Android Google令牌创建解析_User帐户类似

以下是我在该主题中的答案:


1.新用户

流程如下:

  1. 用户授权并获取令牌
  2. 我们使用随机密码创建新用户

您可以使用newChooseAccountIntent()返回电子邮件的方法中的以下代码创建ParseUser .

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
    }
  }
});
Run Code Online (Sandbox Code Playgroud)

2.退回用户

正如我在互联网上研究的那样,这是大多数人坚持的地方.流程如下:

  1. 用户授权并且应用获取令牌
  2. 我们将此令牌传递给Cloud Code进行验证.我们需要检查此令牌是否由Google签名,以及它是否适用于我们(android-developers(2013)).
  3. 在验证令牌有效后,您可以使用Parse.Cloud.useMasterKey()方法在Cloud Code中查询用户,并使用getSessionToken()查询结果上的方法返回会话密钥.
  4. 使用会话密钥通过调用becomeInBackground方法将登录状态保存在磁盘上

要验证令牌,您可以发送Parse.Cloud.httprequest到此端点:https://www.googleapis.com/oauth2/v3/tokeninfo?access_token=.这在Google身份文档中有说明.您将收到如下数据:

{
 "iss": "https://accounts.google.com",
 "sub": "110169484474386276334",
 "azp": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "email": "billd1600@gmail.com",
 "at_hash": "X_B3Z3Fi4udZ2mf75RWo3w",
 "email_verified": "true",
 "aud": "1008719970978-hb24n2dstb40o45d4feuo2ukqmcc6381.apps.googleusercontent.com",
 "iat": "1433978353",
 "exp": "1433981953"
}
Run Code Online (Sandbox Code Playgroud)

需要比较的是"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
});
Run Code Online (Sandbox Code Playgroud)

注意:请确保您具有以下范围,以便在您检查Cloud Code时显示电子邮件:https://www.googleapis.com/auth/plus.profile.emails.read


cri*_*rbs 3

Parse 的问题中有一个关于此的问题。它就在这里,我很确定它可以回答您的问题。

https://parse.com/questions/google-plus

它链接到解析博客,其中有一些解决方法。

它说您可以将任何登录添加到 ParseUser 中。你会做这样的事情:

Parse.User.become("session-token-here").then(function (user) {
// The current user is now set to user.
}, function (error) {
// The token could not be validated.
});
Run Code Online (Sandbox Code Playgroud)

您应该查看的另一个网站: https ://parse.com/tutorials/adding-third-party-authentication-to-your-web-app

最后一个是官方的,有一个示例代码