我有一个我在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
}
答案 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 :(得分:0)
我不确定你是否可以直接翻译...你应该创建一个sessions_controller来设置你的登录功能,在那里你可以评估params [:password]是否等于&#34 ; ABC&#34;并为会话创建cookie,还创建用于销毁它的注销方法,并且必须为这些方法创建路由。 您可能希望在应用程序帮助程序中创建一个帮助程序,检查cookie是否存在以便仅在需要时显示表单,让我知道这个答案是否足够或告诉我女巫部分给你带来麻烦,问候
答案 2 :(得分:0)
如果您想知道或更改代码到rails。看一下这个。 我知道这个可以帮到你,所以你可以集中轨道代码