Javascript 进口护照
谁能帮我使用:require('./config/passport')(passport);。我不能让它工作。我认为您不能同时使用ES导入和require。我得到了一个错误,需要的是未定义的Javascript 进口护照,javascript,node.js,passport.js,Javascript,Node.js,Passport.js,谁能帮我使用:require('./config/passport')(passport);。我不能让它工作。我认为您不能同时使用ES导入和require。我得到了一个错误,需要的是未定义的 import express from 'express'; import bodyParser from 'body-parser'; import mongoose from 'mongoose'; import cors from 'cors'; import dotenv from 'dotenv'
import express from 'express';
import bodyParser from 'body-parser';
import mongoose from 'mongoose';
import cors from 'cors';
import dotenv from 'dotenv';
import { createRequire } from 'module';
const URL = createRequire(import.meta.url);
import passport from 'passport'
import postRoutes from './routes/posts.js'
import userRoutes from './routes/user.js'
import loginRoutes from './routes/login.js'
const app = express();
dotenv.config();
require('./config/passport')(passport);
app.use(passport.initialize());
app.use(passport.session());
是的,我们不能使用commonjs模块的require和ES6模块的import。 虽然解决方法很简单。基本上,您必须将
passport
作为参数传递给从/config/passport
导出的函数。
您只需按原样导入函数并将passport作为参数传递即可
下面是您需要做的:-
config/passport.js
export default = (passport) => {
/* use passport here */
}
index.js
import passport from "passport";
import passportConfig from "./config/passport";
passportConfig(passport);
雅利安是正确的,但我想提供一个稍微不同的解决方案 我建议您尽可能将passports逻辑排除在主
app.js/index.js
文件之外。我用主passport.js
创建了一个config
文件夹,然后创建了一个strategies
文件夹,其中包含用户登录的逻辑
在主入口点文件中,例如app.js
拉入passport的配置传递应用程序
import express from 'express';
const app = express();
require('./src/config/passport')(app);
您的配置文件例如:passport.js
应该如下所示
import passport from 'passport';
require('./strategies/local.strategy')(); //Or whatever strategy you are using
const passportConfig = (app) => {
app.use(passport.initialize());
app.use(passport.session());
// stores user to session
passport.serializeUser((user, done) => {
done(null, user);
});
// retrieves user from session
passport.deserializeUser((user, done) => {
done(null, user);
});
};
export default passportConfig;
示例本地策略又名自定义策略
import passport from 'passport';
import { Strategy } from 'passport-local';
import axios from 'axios';
const localStrategy = () => {
passport.use(new Strategy(
{
usernameField: 'userName',
passwordField: 'password',
},
(username, password, done) => {
const loginUrl = `${process.env.base_url}/api/core/security/login`;
const body = {
InstanceName: process.env.instance_name,
Username: username,
UserDomain: process.env.user_domain,
Password: password,
};
axios.post(loginUrl, body)
.then((response) => {
if (response.data.IsSuccessful === true) {
const user = {
token: response.data.RequestedObject.SessionToken,
userId: response.data.UserId,
userName: username,
};
done(null, user);
} else {
// handle failed login
}
})
.catch((error) =>
//Handle the error
}
))
}
export default localStrategy;