我无法获取我在控制器级别存储的会话值。代码如下:
登录档案
<div class="login">
<h1>Login to HITS</h1>
<div><%= flash[:notice] %></div>
<div><%= session[:userinfo] %></div>
<form method="post" action="isloggedin">
<p><input id="login" type="text" name="login" value="" placeholder="Username or Email"></p>
<p><input id="password" type="password" name="password" value="" placeholder="Password"></p>
<p class="submit"><input type="submit" name="commit" value="Login"></p>
</form>
</div>
控制器文件
class UserController < ApplicationController
protect_from_forgery
def isloggedin
login = params[:login].to_s
password = params[:password].to_s
logged_in = User.where(:user_name => login,:password => password).limit(1)
if not logged_in.blank?
#session[:userinfo] = logged_in
session[:userinfo] = 'Name'
puts(session[:userinfo])
redirect_to '/event/list'
else
#render :json => { :status => :fail}
#flash[:error] = 'Unable to login'
redirect_to '/user/login',:flash => { :error => "Insufficient rights!" }
end
end
end
在视图和控制器中,我做了以下操作:
@picture = session[:userinfo] #at Controller Level
<%= @picture %>
它打印无。
我在Rails4上
session.store.rb
Rails.application.config.session_store :cookie_store, key: '_APP_session'
我可以看到正在创建会话cookie。
更新:控制台提供以下消息:
Processing by UserController#isloggedin as HTML
Parameters: {"login"=>"Jhon", "password"=>"[FILTERED]", "commit"=>"Login"}
Can't verify CSRF token authenticity
更新#2
在我的登录表单中,我看不到下面给出的内容。如何手动添加它?
<div style="display:none"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="a4y1SDHaXHRkiyIW8AncOYcPgRiO5syFXihKc5qqZlg=" /></div>
答案 0 :(得分:1)
由于您在日志中收到“无法验证CSRF令牌”的警告,因此可能会在每次请求时重置会话
添加到您的布局(application_layout head标签):
<%= csrf_meta_tags %>
应该清除警告并解决会话问题!
答案 1 :(得分:0)
logged_in = User.where(:user_name => login,:password => password).limit(1)
if not logged_in.blank?
if语句总是假的。 logged_in
是ActiveRecord::Relation
对象,永远不会为空。将其更改为:
if User.find_by(user_name: login, password: password)
永远不会永远存储普通密码到数据库中!这是一个严重的安全漏洞 - 想象一下你的数据库备份进入了黑客手中。使用散列密码,黑客获取了所有数据,但无法以其他用户身份登录。使用has_secure_password
功能处理密码哈希。
不要手工制作你的观点,使用表格助手 - 它们会让你的生活更轻松:
<div class="login">
<h1>Login to HITS</h1>
<div><%= flash[:notice] %></div>
<div><%= session[:userinfo] %></div>
<%= form_tag action: 'isloggedin' do %>
<p><%= text_field_tag :login, nil, placeholder: 'Username or Email'></p>
<p><%= password_field_tag :password, nil, placeholder: 'Password'%></p>
<p class="submit"><%= submit_tag :commit, 'Login'></p>
<% end %>
</div>
form_tag
和form_for
会自动将CRSF隐藏字段添加到表单中。