- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何使用nuxt auth带有 passport-local 的模块(前端)使用 JWT(后端 express )?
定义 jwt 策略以验证 jwt token ( express )
var JwtStrategy = require('passport-jwt').Strategy,
ExtractJwt = require('passport-jwt').ExtractJwt;
var opts = {}
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'secret';
opts.issuer = 'accounts.examplesoft.com';
opts.audience = 'yoursite.net';
passport.use(new JwtStrategy(opts, function(jwt_payload, done) {
User.findOne({id: jwt_payload.sub}, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
} else {
return done(null, false);
// or you could create a new account
}
});
}));
定义本地策略以验证用户名和密码( express )
passport.use(new LocalStrategy(
function(username, password, done) {
User.findOne({ username: username }, function (err, user) {
if (err) { return done(err); }
if (!user) { return done(null, false); }
if (!user.verifyPassword(password)) { return done(null, false); }
return done(null, user);
});
}
));
验证用户名和密码后颁发 token 的代码( express )
app.post('/login',
passport.authenticate('local', { failureRedirect: '/login' }), //need to update from nuxt auth.
function(req, res) {
res.redirect('/');
});
nuxt auth 本地策略使用用户名和密码返回 JWT token (nuxt)
this.$auth.loginWith('local', {
data: {
username: 'your_username',
password: 'your_password'
}
})
它可以独立工作我如何结合这些?
最佳答案
express 代码
创建 Passport 策略
const passport = require('passport');
const LocalStrategy = require('passport-local').Strategy;
const JwtStrategy = require('passport-jwt').Strategy;
passport.use(
new LocalStrategy(
{
usernameField: 'username',
passwordField: 'password'
},
function(username, password, done) {
users.findOne({ email: username }, function(err, user) {
if (err) {
return done(err);
}
if (!user) {
return done(null, false, { error: 'Invalid username' });
}
if (!user.checkPassword(password)) {
return done(null, false, { error: 'invalid password' });
}
const info = { scope: '*' };
done(null, user, info);
});
}
)
);
const opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderAsBearerToken();
opts.secretOrKey = 'JWT_SECRET_OR_KEY';
passport.use(
new JwtStrategy(opts, function(payload, done) {
users.findById(payload, function(err, user) {
if (err) {
return done(err, false);
}
if (user) {
return done(null, user);
}
return done(null, false);
});
})
);
const express = require('express');
const passport = require('passport');
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(passport.initialize()); // Used to initialize passport
// Routes
app.post(
'/login',
passport.authenticate('local', { session: false }),
function(req, res) {
const token = jwt.sign(req.user.userId, 'JWT_SECRET_OR_KEY');
return res.json({ token });
}
);
app.get(
'/me',
passport.authenticate(['jwt', 'bearer'], { session: false }),
function(req, res, next) {
const { userId } = req.user;
users.findOne({ _id: userId }, (err, data) => {
if (err) {
res.status(500).send(err);
} else if (data) {
const userData = data;
res.status(200).send(userData);
} else {
res.status(500).send('invalid token');
}
});
}
);
auth: {
resetOnError: true,
redirect: {
login: '/login', // User will be redirected to this path if login is required.
home: '/app/dashboard', // User will be redirect to this path after login. (rewriteRedirects will rewrite this path)
logout: '/login', // User will be redirected to this path if after logout, current route is protected.
user: '/user/profile',
callback: '/callback // User will be redirect to this path by the identity provider after login. (Should match configured Allowed Callback URLs (or similar setting) in your app/client with the identity provider)
},
strategies: {
local: {
endpoints: {
login: {
url: '/login',
method: 'post',
propertyName: 'token'
},
logout: false,
user: {
url: '/me',
method: 'GET',
propertyName: false
}
},
tokenRequired: true,
tokenType: 'Bearer'
}
}
this.$auth
.loginWith('local', {
data: {
username: this.user.email,
password: this.user.password
}
})
.catch(err => {
console.error(err );
});
关于passport.js - Nuxt auth 与passportjs?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60434485/
我只想在还有用户后链接twitter帐户。 首先我有一个这样的 router.js // GET Registration Page router.get('/signup', function(re
已经与这个问题搏斗了 2 天了 :) 希望得到一些帮助。 我正在尝试使用passportjs+sqlite+sequelize构建快速身份验证, 1)当我将路由放在 app.use(passport.
我试图找出我的身份验证代码中的错误所在,该代码在每次尝试登录时都会创建一个无限循环。我认为它在我的代码的本地策略 passport.use('local', new LocalStrategy 部分内
我正在尝试使用 Passport js 实现本地身份验证并在 express 中进行 sequalize。我遇到的问题是成功回调永远不会在成功认证时触发。日志显示用户已找到,但用户对象从未登录到请求回
我正在使用 passportjs 进行用户身份验证。在官方指南中,唯一展示的用户案例是认证后的重定向操作: app.post('/login', passport.authenticate('lo
我有一个订购单,用户需要先注册才能订购,所以我可以创建一个帐户然后像这样处理订单。 router.post('/project/new', passport.authenticate('local-s
因此,我使用关系和 PassportJS 在我的 Node 应用程序中对用户进行身份验证。我找不到有关 Passport 本地策略中第一个参数的作用的信息。这个对象是否为用户提供了一个存储在MySQL
我做错了什么?它总是重定向到失败页面,但我无法调试。 // passport var passport = require('passport'), LocalStrategy = requi
我有一个应用程序使用与 Passport 捆绑在一起的所有 oAuth 身份验证,但我正在使用外部服务来创建我的数据库/用户。 如果我这样做: passport.use('local-signup',
使用passportjs进行身份验证。当用户注册时,我希望出现一条消息,让他们知道他们现在可以使用自己的帐户登录。截至目前,注册还会将它们记录下来,这会导致我的通知关闭: “您现在可以注册” “您已经
我正在使用 Passportjs 进行 Facebook 身份验证。这是我的 Facebook 策略: passport.use(new FacebookStrategy({ clie
我正在使用 express 和 passport 构建一个 rest api 后端,我的 localStrategy 似乎没有按要求被调用。 我的应用程序的入口点如下所示: app.js var fs
我是 javascript 和 Node 的新手。我按照 passportJS 的指南进行操作,但收到错误消息“找不到本地策略”。我不知道为什么。我的代码,此时基本上取自网站。 var express
下面是我的代码 restify = require("restify") passport = require("passport") GoogleStrategy = require("passpo
所以我正在处理提供的信息 here添加 Google 将重定向到用户在重定向到 google 之前所在页面的功能。我目前使用的是最新版本的 Express、PassportJS 和 Google oa
我的问题与PassportJS - Using multiple passports within Express application有关话题。 因此,只要我已经有两个单独的 Passport 实
我将 sequelize.js 用于我的数据存储,并将 github 策略与 passport.js 一起使用。我的代码是: app.use(passport.initialize()); app.u
尝试使用passport-JWT实现登录。注册和登录都工作正常, token 在登录时生成并发送到客户端,客户端存储并返回它。 登录身份验证请求到达应用程序后没有任何反应..帮助? :) 智威汤逊战略
这个问题已经有答案了: Understanding Passportjs Custom Callback (3 个回答) 已关闭 6 年前。 我无法理解 Passport.js 的自定义回调发生了什么
我正在玩弄 Passport ,并以这种方式配置我的 Twitter 登录: passport.use(new TwitterStrategy({ consumerKey: '*****',
我是一名优秀的程序员,十分优秀!