【发布时间】:2018-02-14 23:50:22
【问题描述】:
这是一个非常具体的问题,但我真的不知道是什么导致了错误。我有以下代码:
router.get('/user/profile', passport.authenticate('jwt', { session: false }), function(req, res, next){
// Something
});
当我访问路由时,它会通过我的 passport-jwt 代码,其中包含我在用户模型中定义的自定义 getUserById() 函数
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, function(jwt_payload, done){
Users.getUserById(jwt_payload._id, function(err, user){
if(err){
return done(err, false);
}
if(user){
return done(null, user);
} else {
return done(null, false);
}
});
}));
getUserById()
module.exports.getUserById = function(id, callback){
Users.findById(id, callback);
}
当我访问路由时,我的服务器出现以下错误:
ReferenceError: Users is not defined
at Function.module.exports.getUserById (E:\Projects\CSGOOrb\models\users.js:55:2)
at JwtStrategy._verify (E:\Projects\CSGOOrb\config\passport.js:18:9)
at E:\Projects\CSGOOrb\node_modules\passport-jwt\lib\strategy.js:123:34
at E:\Projects\CSGOOrb\node_modules\jsonwebtoken\verify.js:27:18
at _combinedTickCallback (internal/process/next_tick.js:131:7)
at process._tickCallback (internal/process/next_tick.js:180:9)
我在所有使用它的文件中都需要我的用户模型。有谁知道还有什么可能导致它?
编辑:
passport.js
const colors = require('colors/safe');
const Users = require('../models/users');
const config = require('../config/database');
const jwt = require('jsonwebtoken');
const JwtStrategy = require('passport-jwt').Strategy;
const ExtractJwt = require('passport-jwt').ExtractJwt;
const SteamStrategy = require('passport-steam').Strategy;
module.exports = function(passport){
let opts = {};
opts.jwtFromRequest = ExtractJwt.fromAuthHeaderWithScheme('jwt');
opts.secretOrKey = config.secret;
passport.use(new JwtStrategy(opts, function(jwt_payload, done){
Users.getUserById(jwt_payload._id, function(err, user){
if(err){
return done(err, false);
}
if(user){
return done(null, user);
} else {
return done(null, false);
}
});
}));
...
users.js(猫鼬模型)
const mongoose = require('mongoose');
const config = require('../config/database');
// Users Schema
const UsersSchema = mongoose.Schema(
{
admin: {
type: Boolean,
default: false
},
mod: {
type: Boolean,
default: false
},
user: {
type: Boolean,
default: true
},
steam: {
id: {
type: String
},
identifier: {
type: String
},
name: {
type: String
},
avatar: {
type: String
},
avatarmedium: {
type: String
},
avatarfull: {
type: String
},
tradelink: {
type: String
}
}
},
{
timestamps:
{
createdAt: 'created_at',
updatedAt: 'updated_at'
}
}
);
const Users = module.exports = mongoose.model('User', UsersSchema);
module.exports.getUserById = function(id, callback){
Users.findById(id, callback);
}
module.exports.getUserById64 = function(id, callback){
const query = {id: steam.id};
Users.findOne(query, callback);
}
【问题讨论】:
-
那么用户定义了吗?
-
我编辑了我的原始帖子并包含了passport.js,这是我配置护照的文件。用户在顶部定义。如果您需要更多,请告诉我
-
您是否尝试过导出
Users对象并添加getUserById作为原型方法? -
您在定义
getUserById的文件中是否需要Users?你好像没有 -
@YuryTarabanko 我在用户模型文件中定义了函数:)
标签: javascript node.js jwt passport.js