【问题标题】:How to create authentication from scratch in rails 4 [closed]如何在 Rails 4 中从头开始创建身份验证 [关闭]
【发布时间】:2015-09-01 02:05:57
【问题描述】:

我正在尝试在 rails 4 中制作一个笔记应用程序,我真的不想使用设计或任何其他用户身份验证系统,因为我真的只想自己编写代码。我发现的唯一问题是那里没有任何好的教程。 tutorials that I have found 不会教你如何真正做用户认证,因为你只是一直停留在所谓的主页上。所以我想知道是否有人从头开始对用户身份验证方法有任何想法或示例?

非常感谢。

【问题讨论】:

  • Sitepoint 有一个教程,它是旧的并且基于 Rails 3,因此您必须针对差异进行调整。 sitepoint.com/… & sitepoint.com/… -- 你试过那个吗?此外,如果您希望在用户登录后限制访问,请考虑 Pundit,它允许您根据角色编写访问不同控制器操作的策略。
  • 我已经尝试过那些教程,但它们太旧了。
  • 虽然老了,但为了兼容 Rails 4,只有 3 个真正的东西需要改变。 #1 你添加的路由应该声明get 'signup', to: 'users#new' 或者在匹配行中添加via:: #2 你需要向你的控制器添加强参数,但是如果你使用脚手架来生成它们,强参数将是在那里,#3 你应该将控制器中的before_filter 重命名为before_actions,因为它是新语法,可能是第四个,因为我没有深入了解,阅读验证以确保它们对 Rails 4 友好.其余的工作正常。
  • 好的,我试试看

标签: ruby-on-rails ruby ruby-on-rails-4 authentication


【解决方案1】:

别这样。

您不知道有多少种方式会意外地让自己面临严重的妥协。

您不像数百名多年来一直致力于设计的开发人员那么聪明(我们都不是)。

查看Rails Security Guide,了解人们使用您的应用的方式的简短列表,您可能从未考虑过。

如果您想玩一玩,看看它是如何完成的,那么一定要玩...但是当您真正保护真正的应用程序时...只需使用 Devise。

【讨论】:

    【解决方案2】:

    如果这是个人学习练习,那么没有比谷歌搜索信息更好的方法了。大量可用的教程。这些教程不需要是关于 Ruby(或 Rails)的。无论实现语言如何,基本原理都是相同的。

    通过检查现有代码通过示例学习。您可以在此处找到许多现有的身份验证系统。看看他们的代码。 https://www.ruby-toolbox.com/categories/rails_authentication

    如果您打算使用自己的身份验证,我会劝阻您不要这样做。身份验证问题乍一看似乎很简单,但有许多挑战和地雷在等着您:会话、敏感数据存储/传输、cookie 处理等。这些只是表面上的一个小问题。

    【讨论】:

      【解决方案3】:

      链接@miler350 是一个很好的起点,但是对于 Rails 4,ActionModel 现在有 has_secure_password 负责管理密码哈希,您只需要表中的 password_digest 字段并启用 bcrypt gem在您的 gemfile 中(不要忘记运行 bundle install)。查看 APIDoc http://apidock.com/rails/ActiveModel/SecurePassword/ClassMethods/has_secure_password

      至于对用户进行身份验证,我在要保护的控制器中使用 before_action 辅助方法。例如在我的UserController 我有before_action :require_login 引用

      def require_login
        unless current_user
          flash[:error] = MessageBox.alert("You must be logged in to view this")
          redirect_to root_url
        end
      end
      

      http://guides.rubyonrails.org/action_controller_overview.html#filters

      这假设您的 ApplicationController 中有一个辅助方法

      def current_user
        begin
          @current_user ||= User.find(session[:user_id]) if session[:user_id]
        rescue
          session[:user_id] = nil
        end
      end
      helper_method :current_user
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-05
        • 1970-01-01
        • 2019-02-12
        • 1970-01-01
        相关资源
        最近更新 更多