node.js - MERN中的PassportJS Google Auth不起作用
问题描述
所以我试图在 MERN 中使用 Google 身份验证登录,使用 passportjs,但它似乎根本没有做任何事情。
就像当我重定向到 /auth/google 时它什么也不做。
任何人有同样的问题并修复它或知道如何?
这是我的代码:
配置:
const mongoose = require('mongoose')
var passport = require('passport');
var Strategy = require('passport-google-oauth').OAuth2Strategy;
const GoogleStrategy = passport.use(new Strategy({
clientID: 'Cant show for security reason',
clientSecret: 'Cant show for security reason',
callbackURL: "http://localhost:3000/auth/google/callback"
},
function(accessToken, refreshToken, profile, done) {
User.findOrCreate({ googleId: profile.id }, function (err, user) {
return done(err, user);
});
}
));
module.exports = GoogleStrategy;
配置二:
const passport = require('passport');
const User = require('../models/user')
passport.serializeUser(function (user, done) {
done(null, user.email);
});
passport.deserializeUser(function (email, done) {
User.findOne({ email }).exec((err, user) => {
done(err, user);
})
});
const SigninGoogleStrategy = require('./GoogleAuth')
const SigninStrategy = require('./SigninStrategy');
const SignupStrategy = require('./SignupStrategy');
passport.use('google',SigninGoogleStrategy)
passport.use('local-signin', SigninStrategy);
passport.use('local-signup', SignupStrategy);
module.exports = passport;
路线:
const express = require('express');
const app = express.Router();
const passport = require('../passport')
app.get('/auth/google',
passport.authenticate('google', { scope: ['https://www.googleapis.com/auth/plus.login'] }));
app.get('/auth/google/callback',
passport.authenticate('google', { failureRedirect: '/login' }),
function(req, res) {
res.redirect('/profile');
});
module.exports = app;
一些jsx代码:
<a href="/auth/google" className="button">
<div>
<span className="svgIcon t-popup-svg">
<svg className="svgIcon-use" width={25} height={37} viewBox="0 0 25 25">
<g fill="none" fillRule="evenodd">
<path d="M20.66 12.693c0-.603-.054-1.182-.155-1.738H12.5v3.287h4.575a3.91 3.91 0 0 1-1.697 2.566v2.133h2.747c1.608-1.48 2.535-3.65 2.535-6.24z" fill="#4285F4" />
<path d="M12.5 21c2.295 0 4.22-.76 5.625-2.06l-2.747-2.132c-.76.51-1.734.81-2.878.81-2.214 0-4.088-1.494-4.756-3.503h-2.84v2.202A8.498 8.498 0 0 0 12.5 21z" fill="#34A853" />
<path d="M7.744 14.115c-.17-.51-.267-1.055-.267-1.615s.097-1.105.267-1.615V8.683h-2.84A8.488 8.488 0 0 0 4 12.5c0 1.372.328 2.67.904 3.817l2.84-2.202z" fill="#FBBC05" />
<path d="M12.5 7.38c1.248 0 2.368.43 3.25 1.272l2.437-2.438C16.715 4.842 14.79 4 12.5 4a8.497 8.497 0 0 0-7.596 4.683l2.84 2.202c.668-2.01 2.542-3.504 4.756-3.504z" fill="#EA4335" />
</g>
</svg>
</span>
<span className="button-label">Sign in with Google</span>
</div>
</a>
解决方案
我不是很肯定,但我认为您的问题可能出在您的配置/配置 2 中(我假设这些是您护照的不同配置?)。如果您只是从配置 2 中添加一些代码,配置看起来不错。
const passport = require('passport');
const GoogleStrategy = require('passport-google-oauth').OAuth2Strategy;
passport.serializeUser(function (user, done) {
done(null, user);
});
passport.deserializeUser(function (user, done) {
done(null, user);
});
passport.use(
new GoogleStrategy(
{
clientID:'secretClientID',
clientSecret: 'enterClientSecret',
callbackURL: 'http://localhost:3000/auth/google/callback',
},
function (accessToken, refreshToken, profile, done) {
var userData = {
email: profile.emails[0].value,
name: profile.displayName,
token: accessToken,
};
done(null, userData);
},
),
);
同样,我不是 100% 的回答,但也许试试这个,看看它是否有帮助。祝你好运!
推荐阅读
- spring-boot - 如何在我的项目中强制提交消息?
- extjs - 检查使用类检索到的组件上的 isExpaned()
- reactjs - ReactJS 将悬停更改为 onclick
- ionic-framework - 单击菜单侧时无法关闭离子菜单,我正在关注离子框架文档,他们没有使用任何其他代码来关闭
- android - Android Inline Autofill Suggestions IME:没有获得内联建议,自动填充显示为下拉
- javascript - X 秒后自动隐藏“已添加到购物车”WooCommerce 消息
- c# - Xamarin 中的表单验证
- reactjs - 我想在每次单击提交按钮时将对象存储在一个数组中,但是在每个提交按钮之后它将单个对象存储在一个数组中
- authentication - 当我尝试登录时,它会重定向回登录页面,登录凭据错误 laravel 8
- excel - 在 VBA 中,如何在记事本中打开一个填充了单元格值的模板?