我正在使用 Strongloop 创建一个使用访问 token 的 API。
我已经关注了这个guide (以及 Strongloop 文档)创建一个存储访问 token 的 Cookie,并允许应用程序使用 Cookie 来存储访问 token 。
这是我在用户登录后设置 cookie 的代码 (common/models/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/server.js 中,我使用像这样的 cookie 解析器来创建签名的 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']
}));
登录后,会设置一个名称为“access_token”的 cookie,但是,环回似乎并未使用此 cookie/访问 token 来验证对 api 发出的请求。
此外,我有一些客户端 html,我想通过读取 cookie 值来检查用户是否登录,但是,访问 token 通过使用 cookie 解析器进行加密,我不知道如何实际读取存储在该 cookie 客户端的访问 token 。我是一个 Node js 菜鸟,所以如果有人能指出我正确的方向,我将不胜感激。
最佳答案
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');
关于node.js - 检查用户是否登录(Strongloop 和 NodeJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916296/