Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 进口护照_Javascript_Node.js_Passport.js - Fatal编程技术网

Javascript 进口护照

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'

谁能帮我使用: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 { 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;