我正在尝试创建一个需要用户名和密码的安全登录。我正在努力解决这个问题。当我尝试访问我的登录页面时,收到<%= form_tag login_url do%>的错误在登录页面中。如果有人能帮助我完成这项工作,你将成为我的英雄。
包含用户名和密码的表的架构
create_table "users", force: true do |t|
t.string "name"
t.string "password_digest"
t.string "password"
t.string "password_confirmation"
t.datetime "created_at"
t.datetime "updated_at"
end
表中包含用户名和密码的控制器
class User < ActiveRecord::Base
has_secure_password
end
登录页面(我无法开始工作)
<h2>The Maintenance Functions are restricted to authorized users. Please login below</h2>
<%= form_tag login_url do %>
<p>
<label for="name">Name:</label>
<%= text_field_tag :name, params[:name] %>
</p>
<p>
<label for="password">Password:</label>
<%= password_field_tag :password, params[:password] %>
</p>
<%= submit_tag "login" %>
<% end %>
登录页面的控制器
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_name(params[:name])
if user and user.authenticate(params[:password])
session[:user_id] = user.id
redirect_to secertin_secertout_path :notice => "Logged in successfully"
else
flash.alert = "Invalid userid/password combination"
render 'new'
end
end
def destroy
session[:user_id] = nil
redirect_to root_url_path :notice => "Logged Out"
end
end
答案 0 :(得分:0)
原因是,有时候外包与user authentication
一样重要的事情会更好。为什么?有几个原因:
- 它是您应用的重要组成部分
- 它需要适应HTTP安全性的变化
- 它需要与其他依赖项一起使用
醇>
如果你推出自己的身份验证(这并不困难),那么你的主要问题就是你不会拥有其中一个解决方案提供的可扩展性或可靠性。我高度建议使用devise
- 它完全按照你的需要做了
答案 1 :(得分:0)
从表中删除password
和password_confirmation
列,您的代码应该有效。 has_secure_password
为您提供虚拟属性password
和password_confirmation
,但它会在password_digest
列的表格中存储密码的哈希版本。不在数据库中存储密码的纯文本版本是has_secure_password
安全的一部分。