rails 登录和退出

登陆

现在看看如何用这个账户来登陆。

application.html.erb 中来添加

<%= link_to "login", login_path %>

route.rb 中对应要有

get "login" => "users#login", :as => "login"

users_controller.rb 中

def login
end

当然也可以不写。添加模板,app/views/users/login.html.erb

<div class="login-form-container clearfix">
  <div class="login-form">
    <%= form_tag "/create_login_session" do %>
      <dl class="form">
        <dt>
          <%= label_tag "用户名" %>
        </dt>
        <dd>
          <%= text_field_tag :name, params[:name] %>
        </dd>
      </dl>
      <dl class="form">
        <dt>
          <%= label_tag "密码" %>
        </dt>
        <dd>
          <%= password_field_tag :password, params[:password] %>
        </dd>
      </dl>
      <p> <%= submit_tag "登录", :class => "login-button btn btn-primary" %> </p>
      <div class="need-signup">
        <%= link_to "没有账号?注册一个吧", signup_path %>
      </div>
    <% end %>
  </div>
</div>

表单中把数据提交到 “/create_login_session” 这个路由,所以要到 route.rb 中

post "create_login_session" => "users#create_login_session"

这样真正的工作就要在 users_controller.rb 中开展了

def create_login_session
  user = User.find_by_name(params[:name])
  if user && user.authenticate(params[:password])
    session[:user_id] = user.id
    redirect_to :root
  else
    redirect_to :login
  end
end

session 和 current_user

这里的 session 中文翻译成“会话”,在 Rails 中是一个默认就有的方法,你可以向里面存放数据,那么只要你一直打开网站,那么你存储的数据就一直存在。 session 的底层实现原理,参考: http://happypeter.github.io/tealeaf-http/book/http/3_stateful_web_applications.html

和 session 密切相关的一个概念是 cookie,下一集来介绍。

到 application_controller.rb

def current_user
  @current_user ||= User.find(session[:user_id]) if session[:user_id]
end
helper_method :current_user

application.html.erb 中

<% if current_user %>
  <li><%= link_to current_user.name, "#" %></li>
  <li><%= link_to "logout", "#" %></li>
<% else %>
  <li><%= link_to "login", login_path %></li>
  <li><%= link_to "signup", signup_path %></li>
<% end %>

退出登录

application.html.erb 中 logout 对应的这一行改为

<li><%= link_to "logout", logout_path, method: "delete" %></li>

route.rb 中

delete "logout" => "users#logout", :as => "logout"

users_controller.rb 中

def logout
  session[:user_id] = nil
  redirect_to :root
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值