我正在使用环回和护照开发API。我已经看过这个例子,非常好:
https://github.com/strongloop/loopback-example-passport
在文档中,他们说环回遵循此步骤通过第三方提供商对用户进行身份验证:
所以我的问题是,假设有些用户使用移动应用获取访问令牌,我该如何使用Loopback Passport验证该用户的请求?
由于
答案 0 :(得分:11)
我打开了一个关于同一问题的类似主题How integrate loopback third-party login for android。然后找到了解决方案。
首先,重要的是,环回用户可以同时拥有更多的访问权限。当您从网站或移动应用程序登录时,环回每次都会创建一个访问令牌。
如果您要求获取访问令牌,则已有办法执行此操作,因此您可以使用此类登录方式访问令牌
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);
});
});
如果您询问,要使用社交网络帐户登录用户然后获取访问令牌,我可以模拟谷歌方案中的一些内容。您还可以查看额外的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方案中,我在用户点击登录按钮时获取一次性代码。然后将一次性代码发布到我的服务器,以便与访问令牌和刷新令牌进行交换。此外,我从谷歌获取用户个人资料信息。
配置文件和提供程序非常重要,因为UserIdentityModel.login()方法使用provider和profile.id创建匿名用户(如果这些信息不存在)
毕竟你将拥有Android app的访问令牌,如你所见
答案 1 :(得分:2)
从server.js,替换代码如下
app.get('/auth/account', ensureLoggedIn('/login'), function (req, res, next) {
res.json(req.accessToken);
});
使用上面一行的accessToken,您可以使用LoopBack API。您可以扩展代码以创建自己的自定义API。