Как go об отправке токена JWT от клиента обратно на сервер? - PullRequest
0 голосов
/ 30 мая 2020

Итак, в настоящее время у меня есть конечная точка API серверной части api / user / login. Когда пользователь успешно входит в систему, я отправляю response.header обратно клиенту и внутри этого заголовка я включаю токен JWT следующим образом:

router.post('/login', async (request, response) => {

    // validate 
    const {error} = loginValidation(request.body)
    if (error) return response.status(400).send(error.details[0].message)


    const {email, password} = request.body


    // check if email doesn't exist
    const user = await pool.query('SELECT id, email, password FROM users WHERE email = $1 LIMIT 1', [email])
    if(user.rowCount == 0) return response.status(400).send('Wrong email or password')

    // password is correct; move on to validating password
    const id = user.rows[0].id
    const storedEmail = user.rows[0].email
    const storedPassword = user.rows[0].password
    const validPass = await bcrypt.compare(request.body.password, storedPassword)
    if(!validPass) return response.status(400).send('Wrong email or password')

    // create and send token to client
    const token = jwt.sign({_id: id}, "SOMESECRET")
    response.header('auth-token', token).send(token)


})

В полезных данных JWT я сохраняю только идентификатор пользователя, когда пользователь пытается получить доступ к защищенному маршруту. Я запрашиваю пользователя из базы данных из JWT, который был в заголовке.

Мой вопрос: на клиенте, как только я получу JWT, как мне сохранить его, чтобы затем отправить это в будущем запросе api в качестве заголовка?

Кроме того, следует ли вместо этого хранить JWT как httpOnly cook ie? Как мне тогда использовать свои конечные точки API в других клиентах, таких как приложение iOS?

Я проверяю это так:

module.exports = function (request, response, next){
    const token = request.header('auth-token')
    if(!token) return response.status(401).send('Access Denied')

    try {
        const verifed = jwt.verify(token, "SOMESECRET")
        request.user = verifed
        next()
    } catch(error){
        response.status(400).send('Invalid Token')
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...