首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Passport Google Strategy Redirect 500状态代码

Passport Google Strategy Redirect 500状态代码
EN

Stack Overflow用户
提问于 2021-03-25 02:31:50
回答 1查看 31关注 0票数 2

我一直在使用passport和postgres进行google身份验证,重定向URI返回一个错误(状态代码500)。我认为所做的功能就是问题所在,但我不知道到底是哪里出了问题。我试着放置原木。serializeUser函数没有触发,我尝试记录日志。

这是我的护照设置

代码语言:javascript
复制
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth20');
const GithubStrategy = require('passport-github2');
const localStrategy = require('passport-local');
//const bcrypt = require('bcrypt');
const db = require('./db/db');

passport.serializeUser((user, done) => {
    console.log('here?);
    done(new Error('Serialize problem'), user.id); //first arg is the error
})
passport.deserializeUser((id, done) => {
    db.query(
        'SELECT id FROM "Users" WHERE id=$1', [id],
        (error, results) => {
            if (error) {
                throw new Error('Problemo numero 1')
            }
            console.log(results.rows[0])
            done(new Error('Problemo'), results.rows[0]); //first arg is the error




        })
});

passport.use(new GoogleStrategy({
    //options for the strategy
    callbackURL: 'http://localhost:9000/auth/google/redirect',
    clientID: process.env.GOOGLE_CLIENT_ID,
    clientSecret: process.env.GOOGLE_CLIENT_SECRET

}, (accesToken, refreshToken, profile, done) => {
    //passport callback function
    console.log('passport callback function fired')
    console.log(profile)
    db.query(
        `SELECT * FROM "Users" WHERE id=${profile.id}`,
        (error, results) => {

            if (results.rows.length === 0) {
                const date = new Date();
                const password = Math.floor(Math.random() * 100000);
                
                db.query(
                    'INSERT INTO "Users" (id, username, password, creation_date) VALUES ($1, $2, $3, $4)', [profile.id, profile.displayName, 0, date],
                    (error, results) => {
                        if (error) {
                            throw new Error('Insert error')
                        }
                    }


                )
                done(new Error('select error'), profile.id)
            } else {
                console.log(`Current user is id=${profile.id}`)
                done(new Error('select error 2'), profile.id)
                console.log('works?')
            }

        }
    )
}));

和快速设置

代码语言:javascript
复制
var createError = require('http-errors');
var express = require('express');
const passport = require('passport');
var path = require('path');
var cookieParser = require('cookie-parser');
var cookieSession = require('cookie-session');
var logger = require('morgan');
var cors = require('cors');
let mailRouter = require('./mail');
let bcrypt = require('bcrypt');
const db = require('./config/db/db');
const bodyParser = require('body-parser');
require('dotenv').config();

const passportSetup = require('./config/passport');
const authRouter = require('./routes/auth-routes');


var app = express();

let users = [];

app.use(cors());
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
// support parsing of application/json type post data
app.use(bodyParser.json());

//support parsing of application/x-www-form-urlencoded post data
app.use(bodyParser.urlencoded({ extended: true }));

//create cookie and encrypt it
app.use(cookieSession({
    maxAge: 24 * 60 * 60 * 1000,
    keys: [process.env.COOKIE_KEY]
}))

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

app.use(function(req, res, next) {
    next(createError(404));
});


// error handler

app.use(function(err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.send('error');
});




var port = process.env.PORT || '9000';
app.listen(port);

这是我的db.js文件

代码语言:javascript
复制
const { Pool } = require('pg')
const { Client } = require('pg')

const pool = new Pool({
    user,
    host,
    database,
    password,
    port
})


/*
const client = new Client()
client.connect()
*/

module.exports = {
    query: (text, params, callback) => {
        const start = Date.now()
        return pool.query(text, params, (err, res) => {
            const duration = Date.now() - start
            console.log('executed query', { text, duration, /*rows: res.rowCount*/ })
            callback(err, res)
        })
    },
}
EN

回答 1

Stack Overflow用户

发布于 2021-03-25 05:04:19

问题是您正在将一个新构造的错误传递给验证回调中的done函数。如果出现错误,您只需要在第一个参数中传递一个错误。否则,应该传递null

下面是如何使用done的一个简短示例:

代码语言:javascript
复制
db.query(
    'INSERT INTO "Users" (id, username, password, creation_date) VALUES ($1, $2, $3, $4)', [profile.id, profile.displayName, 0, date],
    (error, results) => {
        if (error) {
            // pass error through done function
            done(error)
        }
        // Pass profile object to be serialized
        done(null, profile)
    }
)

done函数的引用:http://www.passportjs.org/docs/configure/#verify-callback

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66787212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档