1.首先生成model user
rails g model user login:string hashed_password:string salt:string
去schema.rb检查无误后就近行数据的迁移
这个博客暂时不开放注册,利用console增加用户
2.为user的login增加数据验证
def password
@password
end
def password=(pass) #password的set方法
return unless pass #pass为空直接返回false
@password = pass
generate_password(pass) #产生实际的密码
end
private
def generate_password(pass)
salt = Array.new(10){rand(1024).to_s(36)}.join #加盐
self.salt ,self.hashed_password =
salt,Digest::SHA256.hexdigest(pass + salt) #利用SHA256进行加密 了
end
3. 这一步去做登录的功能,先生成sessions的controller
rails g controller sessions
4.添加路由
resources :sessions
5.在sessions控制器中建立new和create两个action
6.建立登录页面
<h1>Admin Login</h1>
<%= form_tag sessions_path do -%>
<label for="login">Login</label>
<%= text_field_tag :login , params[:login] %>
<label for="password">Password</label>
<%= password_field_tag :password , params[:password] %>
<%= submit_tag "Login" %>
<% end %>
7.在Model中实现密码认证方法
def self.authentication(login,password)
user = User.find_by_login(login)
if user && Digest::SHA256.hexdigest(password + user.salt) ==
user.hashed_password
return user
else
false
end
end
8.实现具体的create方法
def create
@user = User.authentication(params[:login],params[:password])
if @user
session[:user_id] = @user.id
flash[:notice] = "Welcome #{@user.login}"
redirect_to posts_path
else
flash[:notice] = "The login or password is not corrent."
redirect_to new_session_path
end
end