Passport.js без сохранения состояния / без сессии google auth

Я хочу написать API узла без сохранения состояния с passport.js для аутентификации.

Я хочу создать конечную точку oauth google api, которая возвращает ключ api в случае успеха и другие подробности в случае успеха.

Google API route

router.get('/',passport.authenticate('google', { scope : ['profile', 'email']}));


router.get('/callback', function(req, res, next) {
    passport.authenticate('google', { session: false, failureRedirect: '/#/login'}, function(err, user, info) {
        console.log('------------------in google callback-----------------');
        if (err) res.status(500).json({status_code: 500, message: "Authentication error", data : err});

        if (!user) {
             res.status(404).json({status_code: 404, message : "User not found/created"});
        }
        var token = 'JWT KEY TO USE AS API TOKEN'; 
        res.status(200).json({status_code: 200, message : "Success", data : {token : token, user:user }});
    })(req, res, next);

});

Когда я открываю свою конечную точку API в браузере после успешной аутентификации, ответ json просто выводится на экран, и у меня нет возможности записать то же самое в переменную. Вызов одной и той же конечной точки API через ajax не работает.

Вот как я получаю ответ JSON

Как создать конечную точку API входа в Google, которая работает без сеансов и возвращает токен?

Как я могу запустить это через AJAX? Есть ли способ вызвать эту конечную точку API и получить ответ в обратном вызове успеха?

1 ответ

Процесс аутентификации Google должен происходить на клиенте (поэтому браузер всегда будет открывать эту новую страницу), а затем серверу Google необходимо напрямую связаться с вашим сервером (в конечной точке обратного вызова), в противном случае клиент может просто притвориться, что они аутентифицированы.

Поэтому, если вы пытаетесь сделать это одним запросом к вашему серверу или без сервера, это невозможно.

Другие вопросы по тегам