【发布时间】:2020-04-08 06:14:43
【问题描述】:
我正在与一位同事合作开发一个 android 应用程序,他是一名 Android 开发人员,我对 android dev 知之甚少。我做后端工作,使用 node.js、express 和 passport.js 进行登录和身份验证。
我在本地托管服务器并使用邮递员检查身份验证和注册过程,一切正常。我正在获取我朋友想要的前端状态码。在使用 passport.js 的身份验证部分,成功时我传递了req.user,它应该返回用户正文,以便前端的朋友可以使用用户对象中的字段user.firstName 来显示欢迎消息。
通过 Postman,定义了用户主体,我在 Postman 窗口中获取了一个包含所有字段的用户对象,但通过应用程序它给出了错误。
firstName 是未定义的属性。
Passport.js 逻辑:
const LocalStrategy = require('passport-local').Strategy;
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
//load user model
const User = require('../models/UserSchema');
module.exports = function(passport){
passport.use(
new LocalStrategy({usernameField: 'roll'}, (roll, password, done) => {
//find user
User.findOne({roll: roll})
.then(user =>{
if(!user){
return done(null, false, {message: 'Roll number not registered'});
}
//match password
bcrypt.compare(password, user.password, (err, isMatch) =>{
if(err) throw err;
if(isMatch){
return done(null, user);
}else{
return done(null, false, {message: 'Password incorrect'});
}
})
})
.catch(err => console.log(err));
})
);
/*passport.serializeUser( function(id, done) {
done(null, User.roll);
});
passport.deserializeUser(function(id, done){
User.findById(roll, function(err, user){
done(err, user);
});
});*/
passport.serializeUser(function(user, done) {
done(null, user);
});
passport.deserializeUser((_id, done) => {
User.findById( _id, (err, user) => {
if(err){
done(null, false, {error:err});
} else {
done(null, user);
}
});
});
}
登录路径:
//Login Handle
router.post('/login', (req, res, next) =>{
console.log('/user/login')
passport.authenticate('local', {
successRedirect: '/success',
failureRedirect: '/failure',
session: true,
failureFlash: false
})(req, res, next);
//res.json(pass.user.name);
});
/成功路线:
router.get('/success', (req, res) => {
console.log(req);
let message = 'Login Succesful';
//let user = req.user.firstName
res.status(200).json({'message':message, 'user': req.user.firstName});
})
【问题讨论】:
-
抱歉还有一个小细节,我尝试在 /success 块中使用 console.log 'req' 并通过邮递员,它在控制台中提供对象,如下所示: user: { balance: 20000,交易:[],_id:5e8cb6bbdb4dd34a30161f51,名字:'apple',姓氏:'singh',电子邮件:'a@gmail.com',密码:'$2a$10$Zp4VR5QE0qNkpz8fSdY8YuC7O0gQQqoKFNvFNrYcKvh18UwjQODCi'/16',滚: , date: 2020-04-07T17:22:03.681Z, __v: 0 },但是通过前端应用程序 req 在 console.log 中没有用户对象。
-
嘿@Shamil,您可以编辑您的问题以添加您刚刚发表的评论
标签: javascript android node.js express passport.js