检查用户是否已登录(Strongloop和NodeJS)
问题描述:
我正在使用strongloop创建一个使用访问令牌的API。检查用户是否已登录(Strongloop和NodeJS)
我遵循此guide(也包括strongloop文档)来创建一个存储访问令牌的cookie,并使应用程序能够使用cookie来存储访问令牌。
这里是我的设置cookie一旦用户在(普通/模型/ API-user.js的)记录代码:
'use strict';
module.exports = function(Apiuser) {
// on login set access_token cookie with same ttl as loopback's accessToken
Apiuser.afterRemote('login', function setLoginCookie(context, accessToken, next) {
var res = context.res;
var req = context.req;
if (accessToken != null) {
if (accessToken.id != null) {
res.cookie('access_token', accessToken.id, {
signed: req.signedCookies ? true : false,
maxAge: accessToken.ttl
});
return res.redirect('/');
}
}
return next();
});
};
,然后在我的服务器/ server.js,我使用cookie的解析器这样创造签署饼干:
var cookieParser = require('cookie-parser');
var secret = "somesecret";
//use cookie-parser for signed cookies.
app.use(cookieParser(secret));
// use loopback.token middleware on all routes
app.use(loopback.token({
model: app.models.accessToken,
currentUserLiteral: 'me',
searchDefaultTokenKeys: false,
cookies: ['access_token'],
headers: ['access_token', 'X-Access-Token'],
params: ['access_token']
}));
我登录,设置cookie名称为“的access_token”之后,但是,它似乎并不认为环回使用此cookie /接取令牌验证请求对api做出的。
此外,我有一些客户端的HTML,我想通过阅读cookie值来检查用户是否登录,但是,访问令牌通过使用cookie解析器得到加密,我不知道如何实际阅读存储在该cookie客户端的访问令牌。我有点js noob节点,所以我会很感激,如果有人能指出我正确的方向。
答
有一个在CTX(使用的accessToken),不知道一个功能,如果你已经尝试过作为 您已经阅读文档:
app.use(loopback.context());
app.use(loopback.token());
app.use(function (req, res, next) {
if (!req.accessToken) return next();
app.models.User.findById(req.accessToken.userId, function(err, user) {
if (err) return next(err);
if (!user) return next(new Error('No user with this access token was found.'));
res.locals.currentUser = user;
var loopbackContext = loopback.getCurrentContext();
if (loopbackContext) loopbackContext.set('currentUser', user);
next();
});
});
// anywhere in the app
var ctx = loopback.getCurrentContext();
var currentUser = ctx && ctx.get('currentUser');
答
var ctx = loopBackContext.getCurrentContext();
var accessToken = ctx && ctx.get('accessToken') || null;
if(accessToken && accessToken.userId){
// it will give you login user's id.
}