ES进口护照
ES import passport
谁能帮我用ES导入版的:require('./config/passport')(passport);。我无法让它工作。我不认为你可以同时使用 ES import 和 require 。我得到了 require is undefined 的错误。
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
导出的函数。
您所要做的就是按原样导入函数并将护照作为参数传递。
所以这是你需要做的:-
config/passport.js
export default = (passport) => {
/* use passport here */
}
index.js
import passport from "passport";
import passportConfig from "./config/passport";
passportConfig(passport);
Aryaman 是正确的,但我想提供一个稍微不同的解决方案。
我建议您尽可能将通行证逻辑放在主 app.js/ index.js
文件之外。我创建了一个 config
文件夹,其中包含主要的 passport.js
,然后是一个 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;
谁能帮我用ES导入版的:require('./config/passport')(passport);。我无法让它工作。我不认为你可以同时使用 ES import 和 require 。我得到了 require is undefined 的错误。
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
导出的函数。
您所要做的就是按原样导入函数并将护照作为参数传递。
所以这是你需要做的:-
config/passport.js
export default = (passport) => {
/* use passport here */
}
index.js
import passport from "passport";
import passportConfig from "./config/passport";
passportConfig(passport);
Aryaman 是正确的,但我想提供一个稍微不同的解决方案。
我建议您尽可能将通行证逻辑放在主 app.js/ index.js
文件之外。我创建了一个 config
文件夹,其中包含主要的 passport.js
,然后是一个 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;