环回护照手机登录

Posted

技术标签:

【中文标题】环回护照手机登录【英文标题】:Loopback passport mobile login 【发布时间】:2015-06-11 18:47:02 【问题描述】:

我正在开发一个带有环回和护照的 API。这个例子我看过,挺好的:

https://github.com/strongloop/loopback-example-passport

在文档中,他们说环回遵循此步骤通过第三方提供商对用户进行身份验证:

    访问者通过单击链接或请求使用 Facebook 登录 LoopBack 支持的按钮,用于启动 oAuth 2.0 授权。 Lo​​opBack 将浏览器重定向到 Facebook 的授权端点 这样用户就可以登录 Facebook 并授予 LoopBack 权限 Facebook 将浏览器重定向到 LoopBack 托管的回调 URL 使用 oAuth 2.0 授权码 Lo​​opBack 向 Facebook 令牌端点发出请求以获取 使用授权码访问令牌 Lo​​opBack 使用访问令牌检索用户的 Facebook 简介 Lo​​opBack 通过 (provider, externalId) 搜索 UserIdentity 模型 查看给定 Facebook id 的现有 LoopBack 用户 如果是,则将 LoopBack 用户设置为当前上下文 如果没有,则从配置文件创建一个 LoopBack 用户并在 UserIdentity 中创建相应的记录以跟踪第 3 方登录。 将新创建的用户设置为当前上下文。

所以我的问题是,假设某个用户使用移动应用程序获取访问令牌,我如何使用 Loopback Passport 验证该用户的请求?

谢谢

【问题讨论】:

【参考方案1】:

我打开了一个关于同一问题的类似主题,How integrate loopback third-party login for android。然后找到了解决方案。

首先,重要的是,环回用户可以同时拥有更多的访问令牌。当您从您的网站或移动应用程序登录时,loopback 每次都会创建一个访问令牌。

如果您要获取访问令牌,已经有办法做到这一点,因此您可以使用类似的登录方法获取访问令牌

User.login(username: 'foo', password: 'bar', function(err, accessToken) 
   console.log(accessToken);
);

您唯一需要做的就是从您的 Android 应用程序调用此托管方法。您可以使用环回android sdk(正确方式)或将用户名和密码发布到服务器并处理,就像这样

app.post('/android/custom_login', function(req, res)
    var username = req.body.username;
    var password = req.body.password;

    User.login(username: username , password: password , function(err, accessToken) 
      console.log(accessToken);
      return res.send(accessToken);
    );
);

如果您要询问,使用社交网络帐户登录用户然后获取访问令牌,我可以从谷歌场景中模拟一些事情。你也可以检查额外的loopback github test

app.post('/android/custom_login', function(req, res)
   var provider = 'google';
   var authSchema = 'oAuth 2.0';

   // oneTimeCode from android
   var oneTimeCode = req.body.oneTimeCode;

   // Make a request to google api
   // to exchange refreshToken and accessToken with using google apis
   var accessToken = 'FROM GOOGLE API';
   var refreshToken = 'FROM GOOGLE API';

   // external id is your google or facebook user id
   var externalId = 'FROM GOOGLE API';
   var email = 'FROM GOOGLE API';

   var credentials = ;
   credentials.externalId = externalId;
   credentials.refreshToken = refreshToken;

   var profile = ;
   profile.id = externalId;
   profile.emails = [type:'account', value: email];

   UserIdentityModel.login(
     provider, authSchema, profile, credentials , 
     autoLogin:true, function(err, loopbackUser, identity, token)
            if(err) throw err;
            // token is access token for thig login
            return res.send(token);
   );
);

在谷歌场景中,当用户点击登录按钮时,我获得了一次性代码。然后将一次性代码发布到我的服务器,以便与访问令牌和刷新令牌进行交换。同样在这里,我从 google 获取用户个人资料信息。

Profile 和 provider 非常重要,因为 UserIdentityModel.login() 方法使用 provider 和 profile.id 创建了一个匿名用户(如果这些信息不存在)

如您所见,毕竟您将拥有一个用于 android 应用的访问令牌

【讨论】:

【参考方案2】:
    使用Loopback-Passport example

    从 server.js 中,替换代码如下

    app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) 
        res.json(req.accessToken);
    
        );
    

    使用上面一行中的 accessToken,您可以使用 LoopBack API。您可以扩展代码以创建自己的自定义 API。

【讨论】:

以上是关于环回护照手机登录的主要内容,如果未能解决你的问题,请参考以下文章

护照识别 sdk

Android 低功耗蓝牙 (BLE) 环回

c#Winform有能支持IE,Firefox,Chrome,Safari浏览器的控件吗

电脑注册QQ怎能在手机登录

text 环回登录包括关系

手机怎么登录网页微信?