от получения API в реагировать на экспресс res.redirect - PullRequest
0 голосов
/ 25 мая 2018

Я долго искал, но не смог найти ответ.

Когда кто-то запрашивает данные из API, fetch или AJAX (в SPA реагируют)

Я хочу отправитьданные только зарегистрированному или авторизованному пользователю,

, если не зарегистрированный пользователь или не прошедший аутентификацию пользователь,

Я бы хотел перенаправить на 'someReAuthPage'

Моя стратегия заключается в следующем

в SPA-клиенте реагирует

fetch('/api/someData', {
    method : "GET",
})
.then(......)

на экспресс-сервере

app.get('/api/:blah', (req, res, next) => {
    if(logged in or authenticated user){
        next()
    } else {
        res.redirect('someReAuthPage')
    }
})


app.get('/api/someData', (req, res) => {
    ..........
    res.json('someJsonData')
}

, но этот код не работает, res.redirect не работает ....

Нужно ли писать условный оператор перенаправления для каждого API выборки?

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

кто-нибудь, помогите мне ...

1 Ответ

0 голосов
/ 25 мая 2018

Напишите функцию промежуточного программного обеспечения.Вот моя реализация для проверки, вошел ли пользователь в экосистему, где я использую Firebase.

// Verify the user identity
const verifyoAuth = (req, res, next) => {

    const idToken = req.token || ''; // I get the token using BearerToken parser. 

    if( idToken == '' ){
        return returnQueryError(res, 401, "Unauthorized");
    }

    fbAdmin.auth().verifyIdToken(idToken).then( user => {

        req.user = user;

        next(); // resume to next route.

    }).catch( error => {

        // Report the incident
        eventsLogger.error( error );

        // Send back 401 for usr
        returnQueryError(res, 401, "Unauthorized");    

    });

}

И чтобы использовать ее с определенным маршрутом:

app.get('/api/:blah', verifyoAuth, (req, res, next) => {

    const { user } = req; // the `user` object would have some data about the authenticated user.

    // Return what data
    res.json({ msg: 'I am authenticated' })

})
...