2016-12-29 8 views
0

У меня есть приложение react-redux и используйте паспорт-фейсбук для аутентификации. Я хочу, чтобы пользователь мог войти с любой страницы приложения, а затем сразу же вернуться (перенаправить) на ту же страницу. Каков наилучший способ достижения этого?Как перенаправить на страницу, с которой пользователь вошел в приложение activ-redux с аутентификацией на лицевой стороне паспорта?

До сих пор я придумал следующее решение, но это не кажется правильным. Я создал «фиктивный» компонент SuccessLogin, и я перенаправляюсь к этому компоненту после успешного входа в систему. В компоненте «фиктивный» я перенаправляю пользователя снова в предыдущее место.

Серверный код:

router.get '/facebook/callback', passport.authenticate('facebook', { successRedirect: '/success', failureRedirect: '/auth' }) 

Мой компонент 'фиктивное' выглядит следующим образом:

class SuccessLogin extends React.Component 

    componentDidMount:() -> 
    @props.redirectBack() 

    render:() -> 
    null 

Это как redirectBack определяется:

redirectBack =() -> 
    (dispatch, getState) -> 
    dispatch go(-1) 

go это действие создатель от React-Router-Redux: https://github.com/reactjs/react-router-redux

Могу ли я столкнуться с какими-либо проблемами с этим решением? Что было бы лучшим способом реализовать эту логику?

ответ

0

В конце концов я нашел решение, которое не имеет ничего общего с React-Redux. Это вдохновлено этими двумя вопросами: Redirecting to previous page after authentication in node.js using passport.js и how to redirect to original page after successful authentication using passport-google-oauth. Код на стороне сервера:

setRedirect = (req, res, next) -> 
    req.session.redirectTo = req.headers.referer 
    next() 

successRedirect = (req, res) -> 
    destination = req.session.redirectTo || '/' 
    res.redirect(destination) 

router.get '/facebook', setRedirect, passport.authenticate('facebook', { scope: ['email'] })  
router.get '/facebook/callback', passport.authenticate('facebook', { failureRedirect: '/auth' }), successRedirect