您的位置:首页 > 大数据 > 人工智能

Rails实现一个blog项目02-登录功能和session的实现

2013-09-28 18:03 489 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Rails session
相关文章推荐