Ruby on rails RAILS-不理解密码重置代码

Ruby on rails RAILS-不理解密码重置代码,ruby-on-rails,forms,Ruby On Rails,Forms,我在理解我在网上找到的这个密码重置代码的应用程序逻辑时遇到问题 用户收到带有 链接一些重置代码 点击此按钮后,他们进入 下面的操作称为重置 用户在数据库中被 参考重置代码 将显示更改密码的表单 然后用户输入新密码 在 这就是我困惑的地方 提交表单时,将再次调用该操作 这次参数中没有重置代码,因此在@user=nil时找不到任何用户 这一次是post请求,所以我们输入这部分逻辑 我的问题是-如果@user=nil,这个代码怎么可能有效呢 为您的帐户选择新密码 密码 确认密码

我在理解我在网上找到的这个密码重置代码的应用程序逻辑时遇到问题

  • 用户收到带有 链接一些重置代码
  • 点击此按钮后,他们进入 下面的操作称为重置
  • 用户在数据库中被 参考重置代码
  • 将显示更改密码的表单 然后用户输入新密码 在
  • 这就是我困惑的地方

  • 提交表单时,将再次调用该操作
  • 这次参数中没有重置代码,因此在@user=nil时找不到任何用户
  • 这一次是post请求,所以我们输入这部分逻辑
  • 我的问题是-如果@user=nil,这个代码怎么可能有效呢


    
    
    为您的帐户选择新密码
    

    密码

    确认密码

    如果@user=nil,该代码怎么可能有效

    重置代码不是您顺便粘贴的视图,它查找具有相同重置代码的用户。。。如果找不到,则用户为零。如果重置代码存在,它将不是nil,而是true并返回记录

    如果@user=nil,该代码怎么可能有效


    重置代码不是您顺便粘贴的视图,它查找具有相同重置代码的用户。。。如果找不到,则用户为零。如果重置代码存在,它将不是nil,而是true并返回记录。

    我认为您误解了逻辑流程。您提供的视图用于请求密码重置电子邮件。电子邮件可能包含重置的url,其中包括重置代码参数。检查reset.html视图,确保reset_code参数在那里得到处理。

    我认为您误解了逻辑流程。您提供的视图用于请求密码重置电子邮件。电子邮件可能包含重置的url,其中包括重置代码参数。检查reset.html视图以确保reset_code参数在那里得到处理

    当表单提交时,操作 又打电话来了

    request.post?
    if语句检查他们是否正在提交表单。只有当表单提交
    POST
    请求时,才会执行其中的内容,否则,它将呈现如您所见的页面

    这次参数中没有重置代码,因此在@user=nil时找不到任何用户

    页面未呈现,因此不将用户设置为任何设置都可以,它将重定向回主url,用户将基于会话或cookie,而不是重置代码

    这一次是post请求,所以我们输入这部分逻辑

    虽然我不知道
    @user.update\u attributes
    是如何工作的,因为就像你说的那样,除非最后有
    语句

    当表单提交时,操作 又打电话来了

    request.post?
    if语句检查他们是否正在提交表单。只有当表单提交
    POST
    请求时,才会执行其中的内容,否则,它将呈现如您所见的页面

    这次参数中没有重置代码,因此在@user=nil时找不到任何用户

    页面未呈现,因此不将用户设置为任何设置都可以,它将重定向回主url,用户将基于会话或cookie,而不是重置代码

    这一次是post请求,所以我们输入这部分逻辑


    虽然我不知道
    @user.update\u attributes
    是如何工作的,因为就像你说的那样,除非最后有
    语句。

    我的答案是它是有缺陷的代码

    首先,reset_代码应该通过表单上的隐藏字段或URL中的参数传递回控制器

    其次,如果没有传入重置_代码(如图所示),@user将为nil,您将获得一个AV。您需要在代码周围添加一个保护子句:

    if !@user
      flash.now[:notice] = "User not found."
    elsif request.post?
      ...
    
    此外,如果代码中还没有包含重置代码,则需要某种方式使重置代码过期。在我的系统中,它们在五天后过期。您需要在users表中添加一个额外字段。在其中存储代码发送的日期,并包含另一个在给定时间范围内的保护条款


    (记住,仅仅因为你在网上找到它并不意味着它是正确的和没有bug的)。

    我的答案是它是有bug的代码

    首先,reset_代码应该通过表单上的隐藏字段或URL中的参数传递回控制器

    其次,如果没有传入重置_代码(如图所示),@user将为nil,您将获得一个AV。您需要在代码周围添加一个保护子句:

    if !@user
      flash.now[:notice] = "User not found."
    elsif request.post?
      ...
    
    此外,如果代码中还没有包含重置代码,则需要某种方式使重置代码过期。在我的系统中,它们在五天后过期。您需要在users表中添加一个额外字段。在其中存储代码发送的日期,并包含另一个在给定时间范围内的保护条款


    (请记住,仅仅因为您在“网络”上找到了它,并不意味着它是正确的、没有bug的)。

    很抱歉,我添加了错误的视图,但我现在重新编辑了它。提交此表单后,默认情况下应返回重置操作。但是这次参数中没有重置代码,所以我仍然无法确定@user.update\u属性如何工作。很抱歉,我添加了错误的视图,但我现在重新编辑了它。提交此表单后,默认情况下应返回重置操作。但是这次参数中没有重置代码,所以我仍然无法确定@user.update\u属性如何工作。确切地说,它将如何更新?我更新了帖子以显示r的正确视图
    if !@user
      flash.now[:notice] = "User not found."
    elsif request.post?
      ...