node.js - 检查用户是否登录(Strongloop 和 NodeJS)

标签 node.js strongloop loopback

我正在使用 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');

Current user anywhere or remote methods

关于node.js - 检查用户是否登录(Strongloop 和 NodeJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40916296/

相关文章:

strongloop - 在环回中发送注册电子邮件时查看引擎错误

localhost - Microsoft 环回适配器的用途是什么?

javascript - MongoDB 通过查找查询随机选择 5 个文档

javascript - Grunt/Babel 错误 : Unable to write "dist" file (Error code: EISDIR)

mysql - node.js Mysql连接错误

javascript - 如何处理 Node.JS 中的 UnhandledPromiseRejectionWarning

javascript - 如何在 Loopback 4 中查看文件更改?

node.js - 我不明白这个类型错误

node.js - 如何在loopback js中设置和映射环境数据?

node.js - Loopback包括关系和where