Почему паспорт гугл не в героку - PullRequest
0 голосов
/ 08 декабря 2018

Я разработал паспорт Google Oauth Strategy, который работает в разработке.Но, когда я развертываю его в heroku, он просто перенаправляет на URL вместо того, чтобы перейти на экран согласия Google.Я использую ответную реакцию в интерфейсе и правильно разместил все учетные данные и URL-адреса для обратных вызовов в консоли разработчиков Google.

Вот код для стратегии Google

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 в конечной точке, но ничего не вошло. Кто-нибудь знает, как решить эту проблему?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...