heroku - 为什么 Passport Google 不在 heroku 中
问题描述
我制定了适用于开发的 Passport Google Oauth 策略。但是,当我在 heroku 中部署它时,它只是重定向到 URL,而不是转到 Google 的同意屏幕。我在前端使用 react 并已将所有凭据和回调 URL 正确放置在谷歌开发者控制台中。
这是谷歌策略的代码
passport.serializeUser((user, done) => {
done(null, user.id);
});
passport.deserializeUser((id, done) => {
User.findById(id).then(user => {
done(null, user);
});
});
passport.use(
new GoogleStrategy(
{
// Options for Google Strategy
callbackURL: '/auth/google/redirect',
clientID: google.clientID,
clientSecret: google.clientSecret,
proxy: true
},
(accessToken, refreshToken, profile, done) => {
// Passport callback for Google
User.findOne({ googleID: profile.id }).then(user => {
if (user) {
// User already exist
done(null, user);
} else {
// Create a new user
const user = new User({
name: profile.displayName,
googleID: profile.id,
email: profile.emails[0].value,
avatar: profile.photos[0].value.substring(0, profile.photos[0].value.indexOf('?'))
});
user.save().then(newUser => {
done(null, newUser);
});
}
});
}
)
);
这是授权路线
// Route - /auth/google
// Authenticates the user with Google
router.get(
'/google',
passport.authenticate('google', {
scope: [
'https://www.googleapis.com/auth/userinfo.profile',
'https://www.googleapis.com/auth/userinfo.email'
]
}),
(req, res) => {
console.log('Auth Route');
}
);
// Route - /auth/google/redirect
// Redirect after Google login
router.get('/google/redirect', passport.authenticate('google'), (req, res) => {
res.redirect('/');
});
我正在使用这个链接标签来调用端点
<a href={GOOGLE_LOGIN}>
<button className="btn btn--social btn--google">
<img src={Google} alt="Google Logo" /> Sign In with Google
</button>
</a>
GOOGLE_LOGIN 变量如下
const GOOGLE_LOGIN = process.env.NODE_ENV === 'production' ? '/auth/google' : 'http://localhost:5000/auth/google';
当我在开发中时,URL 会正确重定向到同意屏幕。但是,在部署到 heroku 之后,它只是重定向到https://<URL>/auth/google
而不是进入同意屏幕。我试图console.log
在端点但没有登录。有人知道如何解决这个问题吗?
解决方案
推荐阅读
- git - 仅在 Heroku 上部署新更改
- javascript - 为什么 sx 道具无法访问主题对象?
- django - 要求用户在 UserCreationForm 中填写 Django 中的名字和姓氏等 User 模型的默认字段的最简单方法是什么?
- spring - Spring Boot QuartzAutoConfiguration 2.1.6.RELEASE 和 2.2.2.RELEASE 的区别
- python - 为什么在这种情况下会发生“ValueError: optimizer got a empty parameter list”?
- variables - 移动要设置的变量的参数 - 模型行为变化
- r - 为什么我在选择“with”时会得到 NA
- php - 如何在共享主机上运行 Cron 作业?(流明)
- swift - 在代码的其他地方从 Alamofire 访问 JSON 值
- android - RecyclerView 不会在新搜索中自行清除