1

我正在關注Michael Hartl的教程,以便使用登錄創建註冊表單。我想我會嘗試添加一個記住我的複選框到登錄表單,並將它的值默認爲0,然後在選中時爲1。在rails 3中,助手是否可以使用params?

我在sessionshelper添加一個if語句:

module SessionsHelper 

    def login(user) 
    if params[:remember_me] 
    cookies.permanent.signed[:remember_token] = [user.id, user.password_salt] 
    current_user = user 
    else 
    cookies[:remember_token] = [user.id, user.password_salt] 
    current_user = user 
    end 
    end 

    def current_user=(user) 
    @current_user = user 
    end 

    def current_user 
    @current_user ||= user_from_remember_token 
    end 

    def logged_in? 
    !current_user.nil? 
    end 

    def logout 
    cookies.delete(:remember_token) 
    current_user = nil 
    end 

    private 

    def user_from_remember_token 
    User.authenticate_with_salt(*remember_token) 
    end 

    def remember_token 
    cookies.signed[:remember_token] || [nil, nil] 
    end 

end 

....但由於某種原因,當過我登錄與盒裝檢查或沒有檢查Cookie的到期日期和時間永遠不會設置。它總是說「在會話結束時」,當我檢查在Firefox中的cookie信息。我錯過了什麼嗎?

我的控制器:

class SessionsController < ApplicationController 

    def new 

    end 


    def create 
    user = User.authenticate(params[:session][:email], params[:session][:password]) 
    if user.nil? 
     flash.now[:error] = "Invalid email password combination" 
     render 'new' 
    else 
     login user 
     redirect_to user 
    end 
    end 

    def destroy 
    logout 
    redirect_to root_path 
    end 
end 

觀點:

<%= form_for(:session, :url => sessions_path) do |f| %> 
    <%= f.text_field :email, :placeholder => "Email" %>  
    <%= f.password_field :password, :placeholder => "Password" %>  
    Remember me? <%= f.check_box :remember_me, :value => 1 %> 
    <%= f.submit "Log in", :id => "login_submit" %> 
    <% end %> 

幫助表示讚賞。

+0

你能表單模板添加到這個問題? – rdvdijk

+0

添加了表單。 – LondonGuy

+0

請注意,':value => 1'不是必需的,請參閱[文檔](http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html#method-i-check_box)。 – rdvdijk

回答

0

下解決了我的問題

def login(user) 
    if params[:session][:remember_me] == "1" 
    cookies.permanent.signed[:remember_token] = [user.id, user.password_salt] 
    current_user = user 
    elsif params[:session][:remember_me] == "0" 
    cookies.signed[:remember_token] = [user.id, user.password_salt] 
    current_user = user 
    end 
    end 

觀點:

<%= form_for(:session, :url => sessions_path) do |f| %> 
     <%= f.text_field :email, :placeholder => "Email" %>  
     <%= f.password_field :password, :placeholder => "Password" %>  
     Remember me? <%= f.check_box :remember_me %> 
     <%= f.submit "Log in", :id => "login_submit" %> 
     <% end %> 
1

您需要使用params[:session][:remember_me]而不是params[:remember_me]。與您的控制器的用戶認證線相比較。

+0

我昨天試過,但我會再試一次。 – LondonGuy

+0

這是因爲它在2031年將cookie設置爲過期,但是當我不檢查框時它會執行相同的操作。 – LondonGuy

+0

看到我上面的其他評論,也許':value => 1'扔掉它,刪除它,然後再試一次。 – rdvdijk

相關問題