2016-12-29 37 views
0

我有一个react-redux应用程序,并使用passport-facebook进行身份验证。我希望用户能够从应用的任何页面登录,然后立即返回(重定向)到同一页面。达到此目的的最佳实践方法是什么?如何重定向到用户通过passport-facebook身份验证在react-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.jshow 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 
相关问题