如何使用passport-facebook身份验证重定向到用户使用react-redux app登录的页面?

时间:2016-12-29 02:13:25

标签: react-redux react-router-redux passport-facebook

我有一个react-redux应用程序并使用passport-facebook进行身份验证。我希望用户能够从应用程序的任何页面登录,然后立即返回(重定向)到同一页面。实现这一目标的最佳实践方法是什么?

到目前为止,我已经提出了以下解决方案,但感觉不对。我创造了一个虚拟的'成功登录后,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

我是否会遇到此解决方案的任何问题?什么是实现这种逻辑的更好方法?

1 个答案:

答案 0 :(得分: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