我正在使用strongloop loopback后端进行角度应用.
我还使用loopback-passport模块通过facebook整合第三方登录.
在loopback-example-passport中一切都很好,在重定向到我的应用程序之前,我的应用程序中的一切都很好.已创建用户和访问令牌.
代码:
app.get('/auth/login', ensureLoggedIn('/#login'), function(req, res, next) { console.log('LOOGED IN!!'); console.log(req.user); res.redirect('/#auth/login'); });
工作良好.但我无法理解.如何为我的角度应用程序提供经过身份验证的状态
我试图让控制器路由'/#auth/login':
.controller('AuthCalbackCtrl', function($scope, $cookies, $location, AppAuth, $http, User, LoopBackAuth) { //analogue of User.login responce interceptor LoopBackAuth.currentUserId = $cookies['userId'] || null; LoopBackAuth.accessTokenId = $cookies['access-token'] || ''; LoopBackAuth.rememberMe = false; LoopBackAuth.save(); //asking for currentUser User.getCurrent(function(user) { console.log('ser.getCurrent ', user); }); $location.path('/'); })
此代码发出请求GET/api/users/2但收到401错误.
如果我调整文件/loopback/lob/models/user.js设置权限:
principalType: ACL.ROLE, // principalId: Role.OWNER, principalId: Role.EVERYONE, permission: ACL.ALLOW, property: "findById"
然后请求GET/api/users/2接收200并且一切正常.
我有点困惑.虽然我知道access-token和userId,但我无法理解如何使我的角度应用程序进行身份验证以进行环回
有任何想法怎么做?
这是一个有效的代码.
app.get('/auth/login', function(req, res, next) { //workaround for loopback-password //without this angular-loopback would make incorrect authorization header res.cookie('access-token', req.signedCookies['access-token']); res.cookie('userId', req.user.id); res.redirect('/#auth/login'); });
问题是loopback-passport签名cookie:
res.cookie('access-token', info.accessToken.id, { signed: true, maxAge: info.accessToken.ttl });
在字符串中,它看起来类似于以下"s:.eBvo8bpo9Q9wnNrPjjlG%2FAcYqWkxEgNFqn%2FO54rdGwY"
但是loopback-angular只是将访问令牌复制到header.authorization,所以我们需要放置纯cookie.