我最近在我的应用程序中安装了devise gem。我试图在应用程序的视图中显示当前用户的电子邮件,但是当我在我的视图中使用以下内容时:
<% if user_signed_in? %>
<div>Signed in as... <%= current_user.email %></div>
<% end %>
我收到错误,因为控制台中的current_user为nil。当我在控制台中运行user_session时它也返回nil,但是当我运行signed_in?时,它返回true。我无法弄清楚当用户登录时导致应用程序不存储会话的原因。
我的应用程序控制器:
class ApplicationController < ActionController::Base
before_filter :authenticate_user!
rescue_from DeviseLdapAuthenticatable::LdapException do |exception|
render :text => exception, :status => 500
end
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
我的用户型号:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
before_save :get_ldap_values
devise :ldap_authenticatable, :rememberable, :trackable, :validatable
def get_ldap_values
if self.username
self.email = Devise::LDAP::Adapter.get_ldap_param(self.username,"mail").first if Devise::LDAP::Adapter.get_ldap_param(self.username,"mail")
self.display_name = Devise::LDAP::Adapter.get_ldap_param(self.username,"displayName").first if Devise::LDAP::Adapter.get_ldap_param(self.username,"displayName")
end
end
end
有谁知道造成这种情况的原因是什么?
更新 这是current_user.email在视图中引发的错误:
undefined method `email' for nil:NilClass
答案 0 :(得分:1)
当然,current_user
在Rails控制台中为零。
控制台与处理请求时的服务器没有相同的上下文。控制台只是加载配置文件并启动应用程序 - 没有当前请求或会话 - 因此current_user
的整个概念甚至都不适用。
你当然可以通过实例化一个请求对象以及围绕一个真实请求的所有其他环境来伪造它,但这是一种非常繁琐的一次性测试方法,可以通过实际功能,集成或验收测试进行更好的测试