Я использую oauth2 для входа через Google. Для этой цели я использую паспорт.
Я разрабатываю только успокоительный API. Эти API будут использоваться веб-панелью и мобильными приложениями.
Ниже приведен поток, который я думаю, как он работает, и я реализовал то же самое.
1. Пользователь нажимает логин через goole: api https://myserver/api/v1/auth/google
2. Паспорт перенаправляет пользователя на экран согласия, где пользователь дает разрешение
3. Google аутентифицирует пользователя и отправляет запрос на получение callbackUrl
: https://myserver/api/v1/google/redirect
Здесь я получаю данные пользователя, которые храню их в БД и подписываю JWT с учетными данными пользователя, и я отправляю токен.
Проблема, которая у меня здесь, это ответ на запрос обратного вызова Google, а не пользователя.
Как я могу отправить JWT пользователю?
Я попытался перенаправить URL запрошенного хоста, как показано ниже.
res.redirect(${req.headers.host/dashboard?token=${jwt})
Но здесь проблема в том, что req.headers.host
не является хостом пользователя.
У меня есть только один вариант - жестко закодировать URL-адрес хоста клиента. В этом случае он не может быть использован мобильными приложениями.
Возможно, мне что-то не хватает, помогите.
//models
const Customer = require('../../models').ParentCustomer
// validator
const {
validateRegistration
} = require('../../services/ValidatorService')
//services
const generateJWT = require('../../services/JwtService/generate')
module.exports = async function(req, res) {
console.log(req.user)
const user = req.user._json
//generate jwt
const payload = {
userName: user.name,
email: user.email,
role: 1,
user_type: 2
}
//create db record
const token = generateJWT(payload)
res.redirect(http:\/\/localhost:4200/dashboard/welcome?accessToken=${token}&user_role_id=${payload.role}&uer_type_id=${payload.user_type})
// return res.status(200).send({
// status: true,
// message: "Logged in successfully!",
// data: {
// accessToken: token
// }
// })
}