在Rails中对整个站点进行简单的密码验证

时间:2014-06-20 05:54:25

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

我有一个我在Rails中重写过的PHP应用程序。我唯一没有实现的是身份验证。我是唯一有效的用户,因此我只是将表单POST输入与硬编码哈希进行比较。 (因此注册等的宝石太过分了)

我最接近的等价物是http_basic_authenticate_with文件中的application_controller.rb命令。但是我更喜欢在网站上输入密码字段,也不必输入用户名。

这是一个粗略的伪代码,代码是PHP的样子。 Ruby on Rails的最佳翻译是什么?

<?php
session_start();

if (! empty($_GET['logout']))
{
    session_destroy();
    header('Location: ?');
    die;
}
else if (! empty($_SESSION['logged_in']))
{
  // application code

  ?>
  <a href="?logout=true">Log out</a>
  <?php
}

else if (! empty($_POST['password']) && sha1($_POST['password']) === 'abc')
{
    $_SESSION['logged_in'] = true;
}

else
{
    ?>
    <form method="POST">
        <input type="password" name="password">
        <input type="submit" value="Log in">
    </form>
    <?php
}

3 个答案:

答案 0 :(得分:1)

<强>验证

您希望设置一个session值,您的用户可以在该网站上随身携带(允许您进行测试以确定各种交互性)。

您似乎已经在PHP中执行此操作,因此我将在下面翻译您的代码;但是你可能也希望看看how Devise do this - 因为这是Rails中使用最广泛的身份验证Gem,他们显然做得对。

Rails的美妙之处在于它允许sessions在整个应用中发挥作用,即使他们访问了多个页面,您也可以让某人登录

-

<强>框架

您当前的代码是一个简单的脚本;这需要模块化以与Rails MVC结构一起使用。这是使用controllers&amp; actions - 由routes访问。 Devise使用Sessions controller

#config/routes.rb
resources :sessions

#app/controllers/sessions_controller.rb
Class SessionsController < ApplicationController
   def create
       sessions[:user][:authentication] = SecureRandom.hex(8)
   end

   def destroy #-> this will use the DELETE HTTP Verb
       session[:user][:authentication].delete
       redirect_to root_path
   end
end

如果您想检查用户是否已登录,则您需要做的就是检查session[:user][:authentication]变量,该变量可以在helper处理:

#app/helpers/authentication_helper.rb
class AuthenticationHelper
    def user_signed_in?
        session[:user][:authentication].present?
    end
end

这需要考虑几个重要事项:

  
      
  1. 您需要尽可能保持模块化
  2.   
  3. 您需要确保在任何地方没有密码但在数据库中(即使这样,它们也应该进行哈希处理)
  4.   
  5. 您需要尽可能保持干净
  6.   

显然是一个非常简短的概述 - 如果需要,我可以解释一下吗?

答案 1 :(得分:0)

我不确定你是否可以直接翻译...你应该创建一个sessions_controller来设置你的登录功能,在那里你可以评估params [:password]是否等于&#34 ; ABC&#34;并为会话创建cookie,还创建用于销毁它的注销方法,并且必须为这些方法创建路由。 您可能希望在应用程序帮助程序中创建一个帮助程序,检查cookie是否存在以便仅在需要时显示表单,让我知道这个答案是否足够或告诉我女巫部分给你带来麻烦,问候

答案 2 :(得分:0)

如果您想知道或更改代码到rails。看一下这个。 我知道这个可以帮到你,所以你可以集中轨道代码

<强>来源: https://www.youtube.com/watch?v=h0k6DFIStFY