【问题标题】:withCredentials = true is not working even after using CORSwithCredentials = true 即使在使用 CORS 后也无法正常工作
【发布时间】:2020-04-18 01:05:46
【问题描述】:

我正在使用 Vue@CLI 和 ExpressJs 以及 Passport.js 进行身份验证。我编写了以下代码来设置使用电子邮件和密码进行身份验证的本地策略。我已经在 postman 中测试了代码,它工作正常,cookie 已成功存储会话。

但是当我从客户端(即 VueJs)获取 Http 请求时,它会存储会话,但是当我刷新浏览器时,会话就消失了。我

我只是 Web 开发的初学者,我已经尝试过互联网上提供的所有解决方案,例如使用 axios.defaults.withCredentials = true 并通过请求传递 withCredentials: true。

请帮帮我,我被屏蔽了....

users.js

router.post('/login', async (req, res, next) => {   

passport.authenticate('local', {
    session: false
    }, (err, user, info) => {
        if(err) return next(err)
        if (!user) { 
            return res.send("LogIn Failed") 
        }
        req.logIn(user, function(err) {
        if (err) { return next(err) }  
        req.session.user = "hey"
        console.log(req.session)
        res.send("Log In Success")              

    })
})(req, res, next)router.post('/login', async (req, res, next) => {   

passport.authenticate('local', {
    session: false
    }, (err, user, info) => {
        if(err) return next(err)
        if (!user) { 
            return res.send("LogIn Failed") 
        }
        req.logIn(user, function(err) {
        if (err) { return next(err) }  
        req.session.user = "hey"
        console.log(req.session)
        res.send("Log In Success")              

    })
})(req, res, next)  
 })

app.js

const express = require('express')
const app = express()
const morgan = require('morgan')
const bodyParser = require('body-parser')
const mongoose = require('mongoose')
const session = require('express-session')
const passport = require('passport')
const cors = require('cors')
const MongoStore = require('connect-mongo')(session);
const cookieParser = require('cookie-parser')

//Config Passport
require('./config/passport')(passport)

//Routes
const projectRoutes = require('./api/routes/projects')
const userRoutes = require('./api/routes/users')


//App Middlewares
app.use(morgan('dev'))
app.use(cors())
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())
app.use(cookieParser())


//Express Session
app.use(session({
  secret: 'secret-key',
  resave: false,
  saveUninitialized: true,
  store: new MongoStore({ 
      mongooseConnection: mongoose.connection,
       ttl: 24 * 60 * 60 
   }),
  cookie: {
    maxAge: 24 * 60 * 60 * 1000

    }
}))

//Passport Middleware
app.use(passport.initialize());
app.use(passport.session());


//Route Middlewares
app.use('/project', projectRoutes)
app.use('/user', userRoutes)

//404 Not Found
app.use((req, res, next) => {
    const error = new Error('Not Found')
    error.status = 404
    next(error)
})

//Errors
app.use((error, req, res, next) => {
    res.status(error.status || 500)
    res.json({
        error: {
            message: error.message
        }
    })
})

//Database Connection
mongoose.connect('mongodb://localhost/database', { useNewUrlParser: true },)
    // mongoose.Promise = global.Promise;



module.exports = app

我正在传递以下请求:

this.result = await axios.post('http://localhost:3000/user/login', {               
       email: this.email,
       password: this.password              
},
{withCredentials: true});  

【问题讨论】:

  • 兄弟你找到解决方案了吗?我也遇到了同样的问题

标签: node.js express authentication axios passport-local


【解决方案1】:

只需将app.use(cors()) 更改为

app.use(cors(
  {origin: ['your client side server'],
  methods: ['GET', 'POST'],
  credentials:true,
}
))

【讨论】:

    猜你喜欢
    • 2019-05-07
    • 2016-09-27
    • 2018-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多