我有一个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
我是否会遇到此解决方案的任何问题?什么是实现这种逻辑的更好方法?
答案 0 :(得分: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