I was following Michael Hartl's tutorial to build a sign up form with login. I thought I would try and add a remember me check box to the login form and make it's value default at 0 and then 1 when checked.
I added an if statement in my sessionshelper:
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
....but for some reason when ever I log in with boxed checked or not checked the cookie expiry time and date is never set. It always says "At end of session" when I check cookie info in firefox. Am I missing something?
my controller:
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
view:
<%= 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 %>
Help is appreciated.
You need to use params[:session][:remember_me]
instead of params[:remember_me]
. Compare to it to your controller's user authentication line.
The following solved my issue
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
view:
<%= 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 %>
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.