1

我在我的项目中使用了 feathersjs 框架。在旧版本中,我的中间件可以正常工作,但是在更新框架并创建新应用程序后,验证中间件无法正常工作。

我的 index.js 文件如下所示:

const cookieParser = require('cookie-parser');
const { authenticate } = require('@feathersjs/express');

module.exports = function (app) {

app.get('/login', (req, res) => {

    res.sender('login');
    
});

app.use('/', cookieParser(), authenticate('jwt'), async (req, res) => {

    const { user } = req;

    try {
        
        await app.service('users').get(user._id);
        
        res.sender('home');
        
    } catch(e){
        
        res.redirect('/login');
        
    }
    
});

}

我在 jQuery 中有一个登录脚本,如下所示:

$(document).ready(function(){

const socket = io();

const app = feathers();

app.configure(feathers.socketio(socket));

app.configure(feathers.authentication({
  storage: window.localStorage
}));

$('.form-signin').submit(function(){
    
    app.authenticate({
        strategy: 'local',
        username: $('#inputUsername').val(),
        password: $('#inputPassword').val(),
        
    }).then( result => {

        document.cookie = "feathers-jwt=" + result.accessToken;
        window.location.href = "/";
        
    }).catch(error => {});
  
  });
  
});

我的问题是,当我正确单击带有数据的登录按钮时,我会收到一个 accessToken,但每次出现 401 错误代码时,我都看不到主页和应用程序 - 没有授权。

控制台向我显示以下信息:info: Invalid authentication information (no `strategy` set) {"type":"FeathersError","name":"NotAuthenticated","code":401,"className":"not-authenticated","errors":{}}

在新版本中也不能正常工作 failureRedirect: '/login'

解决方案

在 app.get('/', authenticate('jwt'), (req, res) => {}); 之前添加以下代码

app.use('/', cookieParser(), (req, res, next) => {
      
      var cookies = req.cookies;
      var token = cookies['feathers-jwt'];
      
      req.authentication = {
              strategy: 'jwt',
              accessToken: token
            }
      
      next();
  })
4

0 回答 0