redirect_uri: http://XXX.herokuapp.com/auth/google/ошибка обратного вызова
В «Авторизованном перенаправлении uri» (облачная консоль Google, oauth2.0) я помещаю https://XXX.herokuapp.com/auth/google/callback , но когда я пытаюсь войти, он выдает ошибку 400: redirect_uri_mismatch. Но когда я меняю его на «http», вход работает. Мое приложение heroku работает только по протоколу https. Но это приводит к тому, что остальная часть сайта становится http, что не очень хорошо, и сам Google не позволяет мне публиковать, если HTTP-запрос не переведен на https. Я не знаю, что делать... помогите, пожалуйста.
Это мой auth.js
const express = require("express");
const router = express.Router();
const passport = require("passport");
//Authenticate with google
//GET /auth/google
router.get("/google", passport.authenticate("google", { scope: ["profile"] }));
//Google auth callback
//GET /auth/google/callback
router.get("/google/callback", passport.authenticate("google", { failureRedirect: "/" }),
function (req, res) {
// Successful authentication, redirect home.
res.redirect("/something");
}
);
router.get("/logout", (req, res) => {
req.logout();
res.redirect("/");
});
module.exports = router;
Это ошибка при использовании https в качестве URI перенаправления
Authorization Error
Error 400: redirect_uri_mismatch
You can't sign in to this app because it doesn't comply with Google's OAuth 2.0 policy.
If you're the app developer, register the redirect URI in the Google Cloud Console.
Learn more
Request Details
The content in this section has been provided by the app developer. This content has not been reviewed or verified by Google.
If you’re the app developer, make sure that these request details comply with Google policies.
redirect_uri: http://XXX.herokuapp.com/auth/google/callback
1 ответ
Итак, я получил ответ в своем паспорте.js (о котором я не упомянул в вопросе) вместо
"авторизация/гугл/обратный вызов"
как callbackURL
Я написал весь URL-адрес с https, например:
https://XXX.herokuapp.com/auth/google/callback
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const mongoose=require("mongoose")
const User=require('../models/User');
module.exports=function(passport){
passport.use(new GoogleStrategy({
clientID: process.env.GOOGLE_CLIENT_ID,
clientSecret: process.env.GOOGLE_CLIENT_SECRET,
callbackURL: "https://XXX.herokuapp.com/auth/google/callback"
}, async(accessToken, refreshToken, profile, done)=>{
const newUser={
googleId:profile.id,
displayName:profile.displayName,
firstName:profile.name.givenName,
lastName:profile.name.familyName,
image:profile.photos[0].value
}
try {
let user=await User.findOne({googleId:profile.id})
if(user){
done(null,user)
}
else{
user=await User.create(newUser)
done(null,user)
}
} catch (err) {
console.error(err);
}
}))
passport.serializeUser(function(user, done) {
done(null, user.id);
});
passport.deserializeUser(function(id, done) {
User.findById(id, function (err, user) {
done(err, user);
});
});
}