登陆
现在看看如何用这个账户来登陆。
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