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

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







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值