我在我的项目中使用了 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();
})