所以我一直在使用Authlogic来允许用户帐户创建和身份验证。我拥有我想要的大部分功能,但我目前在“remember_me”功能方面遇到了麻烦。
我有一个复选框,指示用户是否想要在关闭浏览器后记住。但是,无论如何,即使我检查了盒子,记住我也会设置为false。创建user_session时,我可以根据复选框的状态看到“remember_me”的值是否正确。尽管如此,当我将“remember_me”的值打印到控制台时,无论是否选中了复选框,都是假的。
当我使用以下方法强制值为true时,remember_me功能按预期工作:
@user_session.remember_me = true
并将其放在UserSession控制器中。我使用的two examples都使用复选框来确定字段的值,我相信我正确地遵循了它们,因此我不知道为什么我的复选框没有正确设置“remember_me”字段。我认为可能发生的一个问题是复选框将值保存到另一个名为“remember_me”的字段,这就是实际字段始终为false的原因。
是否有人知道如何解决此问题或有任何建议如何这样做?谢谢!
用户会话控制器:
class UserSessionsController < ApplicationController
def new
@user_session = UserSession.new
end
def create
@user_session = UserSession.new(user_session_params)
#@user_session.remember_me = true
#puts(@user_session.remember_me)
if @user_session.save
flash[:success] = 'Welcome back'
redirect_to home_path
else
flash[:notice] = 'Failed to log in'
redirect_to :back
end
end
def destroy
current_user_session.destroy
flash[:success] = 'Goodbye'
#redirect_to root_path - Should redirect somewhere after signout
end
private
def user_session_params
params.require(:user_session).permit(:email,:password,:remember_me)
end
end
用户会话“new.html.erb”
<div class="loginContainer" align="center">
<h1 align="center"><b>Log In</b></h1>
<%= form_for @user_session do |u| %>
<div class="container">
<%= render 'shared/errors', object:@user_session %>
<label><b>Email</b></label>
<%= u.text_field :email, placeholder: 'Email Address' %>
<!--<input type="text" placeholder="Enter Username" name="uname" required> -->
<br>
<label>
<b>Password</b>
</label>
<%= u.password_field :password, placeholder: 'Password' %>
<!--<input type="password" placeholder="Enter Password" name="psw" required> -->
<br>
<%= u.label 'Remember me' %>
<%= u.check_box :remember_me %>
<%= u.submit 'Login', class: 'btn btn-primary' %>
<!-- <button type="submit">Login</button> -->
</div>
<% end %>
<div class="container" style="background-color:#D3D3D3">
<%= link_to 'Forgot your password?', new_password_reset_path %>
</div>
</div>
用户会话模型
class UserSession < Authlogic::Session::Base
def to_key
new_record? ? nil : [ self.send(self.class.primary_key) ]
end
end
用户会话请求参数(选中复选框):
<ActionController::Parameters {"email"=>"fake@gmail.com", "password"=>"password1", "remember_me"=>"1"} permitted: true>
答案 0 :(得分:0)
尝试打印发送到您的操作的确切数据。
puts params
=> {user_session: {..., remember_me: "1"}}
然后在控制台中尝试操作以查看复选框数据是否被解释为true
,我怀疑这是问题。
rails c
params = {..., remember_me: "1"}
session = UserSession.new(params)
session.remember_me?
=> false # if "1" is not setting this to true
=> true # if "1" is setting this true
如果这是问题,您需要将数据作为Ruby true
布尔值。
def user_session_params
if params[:user_session][:remember_me].present? # not nil or ""
params[:user_session][:remember_me] = true
end
params.require(...).permit(...)
end
虽然我有这样的感觉,Rails足够聪明,可以处理这个布尔列作为基于存在。