首页 文章

Loopback护照移动登录

提问于
浏览
13

我正在开发一个带有环回和护照的API . 我见过这个例子,非常好:

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

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

  • 访问者通过单击LoopBack支持的链接或按钮来使用Facebook登录以启动oAuth 2.0授权 .

  • LoopBack将浏览器重定向到Facebook的授权终端,以便用户登录Facebook并授予LoopBack权限

  • Facebook使用oAuth 2.0授权码将浏览器重定向到LoopBack托管的回调URL

  • LoopBack向Facebook令牌 endpoints 发出请求,以使用授权码获取访问令牌

  • LoopBack使用访问令牌来检索用户的Facebook Profiles

  • LoopBack通过(provider,externalId)搜索UserIdentity模型,以查看给定Facebook id的现有LoopBack用户如果是,则将LoopBack用户设置为当前上下文如果不是,请从配置文件创建LoopBack用户并创建相应的记录在UserIdentity中以跟踪第三方登录 . 将新创建的用户设置为当前上下文 .

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

谢谢

2 回答

  • 11

    我曾就同一个问题开了一个类似的话题,How integrate loopback third-party login for android . 然后为此找到了解决方案 .

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

    If you are asking about to get access token ,已经有办法做到这一点,所以你可以使用这样的登录方法获取访问令牌

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

    你唯一要做的就是从你的Android应用程序调用这个托管方法 . 您可以使用loopback 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);
        });
    });
    

    If you are asking about, to make logged in users with social network account and then get access token ,我可以模拟谷歌场景中的一些东西 . 你也可以查看额外的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);
       });
    });
    

    在谷歌场景中,当用户点击登录按钮时,我将获得一次性代码 . 然后将一次性代码发布到我的服务器,以便与访问令牌和刷新令牌进行交换 . 此外,我从谷歌获取用户 Profiles 信息 .

    配置文件和提供程序非常重要,因为UserIdentityModel.login()方法使用provider和profile.id创建一个匿名用户(如果这些信息不存在)

    毕竟你将拥有Android应用程序的访问令牌,如你所见

  • 2
    app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) {
        res.json(req.accessToken);
    
        });
    
    • 使用上面一行的accessToken,您可以使用LoopBack API . 您可以扩展代码以创建自己的自定义API .

相关问题