【问题标题】:Redirect from email link to page从电子邮件链接重定向到页面
【发布时间】:2020-10-13 07:02:29
【问题描述】:

所以我目前正在我的网站上实施“重置密码”功能。我的应用程序使用 JWT 进行身份验证。该应用程序在前端使用 React(React Hooks,而不是组件),react-router-dom 用于路由,而 Flask 在后端。

后端功能运行良好。用户填写他们希望重置密码的电子邮件的电子邮件地址,然后后端发送一封电子邮件,其中包含指向该地址的链接,他们可以单击(此时,一旦单击,它只会返回 OK 响应并执行没有别的)。

我的问题是,在他们的收件箱中点击链接后,我希望用户被转发到/change_password 页面,他们可以在其中填写新密码。

单击电子邮件链接后,如何从 Flask 后端转到 React 中呈现特定路由?

我在整个应用程序中使用react-router-dom 客户端路由。

我只是问,因为应用程序混合使用服务器端和客户端渲染似乎有点奇怪。如果我可以转发到 React 中的页面,那就太好了。

所以我的路由是由 index.jsx 调用的

index.jsx

ReactDOM.render(<AppRouter/>, document.getElementById("app"));

routes.jsx

const AppRouter = () => {
  const [user, setUser] = useState(null);
  const providerValue = useMemo(() => ({user, setUser}), [user, setUser]);

  return(
    <BrowserRouter>
      <Route exact path='/' component={LandingPage} />
      <Switch>
        <UserContext.Provider value={providerValue}>
          <Route path="/login" component={LoginPage} />
          <Route path="/register" component={RegisterPage} />
          <Route path="/forgotten" component={ForgottenPage} />
          <PrivateRoute path="/home" component={UserApp} />
        </UserContext.Provider>
      </Switch>
      <Redirect from="*" to="/" />
    </BrowserRouter>
  )
}

目前,Flask 只渲染 index.html,它有 1 个标签元素 id 为 app

任何建议都会很棒。

【问题讨论】:

    标签: reactjs flask react-router-dom


    【解决方案1】:

    抱歉,没有 100% 了解您当前的设置是什么

    服务器端渲染 是的,完全正确,然后在单击按钮时将其发送过来,应将令牌和用户ID发送到后端,并在验证后后端发回一个模板,然后将其填写并再次与令牌和用户ID一起发送到API (至少我会怎么做)

    客户端渲染

    我要解决的方法是在我的路由器中 {recoverComponent} 然后让链接将您带到 app.com/recoverpassword/{tempToken} 然后在调用后端的recoverComponent 上设置一个componentDidMount,以确保链接处于活动状态并且令牌有效。如果是,则使用令牌设置新密码。

    您可以尝试使用某种类型的侦听器,但如果他们切换浏览器以转到他们的电子邮件收件箱(仅作为示例),那么这将不起作用。完全不建议这样做

    【讨论】:

    • 您好,我更新了问题并添加了一些代码 sn-ps 以澄清。 &lt;Route path "/recoverpassword/:tempToken"&gt;{recoverComponent} 这一点是有道理的。但是我怎样才能从烧瓶路由到那个?单击电子邮件验证链接会将响应发送回烧瓶而不是 React。
    • 和其他屏幕一样吗?无论您现在进行何种设置以使注册屏幕正常工作,只需为恢复密码屏幕执行此操作即可。唯一的区别是在这里你只需要检查临时令牌是否有效
    • 因此,一旦单击链接,烧瓶路由应该执行redirect('http://myapp.com/change_password') 并且应该重定向到正确的页面(假设反应路由已设置)?听起来它应该工作。谢谢你的建议。这很有帮助。
    • 是的,但我会将其路由到 redirect('myapp.com/change_password/:token') 以便您可以将令牌传回,而不必进行更多的 api 调用。您需要将此令牌发送回服务器,因为它目前是您的身份验证。
    • 太好了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2011-10-08
    • 1970-01-01
    相关资源
    最近更新 更多