Fra*_*ois 5 ruby-on-rails ruby-on-rails-3
我希望你能帮忙,现在已经在这个问题上挣扎了一段时间:| 我正在使用设计和Rails 3
当我点击登录时,我得到设计登录页面,我打入用户名和pw并单击登录.
点击登录后,我被重定向到主页面,但现在我仍然看到登录链接,这意味着<%if user_signed_in?%>仍然是假的.但是我登录后似乎会话变量中有一些值,这里发生了什么?我一直在使用设计并且之前没有任何问题.谢谢你们!
<%= session %>
no value
<% if user_signed_in? %>
**is false**
Run Code Online (Sandbox Code Playgroud)
我用设计登录后
<%= session %>
_csrf_tokenAMUwVLu6G6rWfKICB43PYApFsYFRjVyJDSc2oU88uEk=warden.user.user.keyUser342$2a$10$.zslfggeUqvq.m/5LNSolOsession_id0db80c26bc36a4c1c74c223655dcb092
<% if user_signed_in? %>
**is false**
Run Code Online (Sandbox Code Playgroud)
编辑:
我的routes.rb文件
Cybercellar3::Application.routes.draw do
devise_for :users
get "home/index"
Run Code Online (Sandbox Code Playgroud)
<% if signed_in? %>
**is still false**
Run Code Online (Sandbox Code Playgroud)
EDIT2:
user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :encryptable, :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email, :password, :password_confirmation, :remember_me
end
Run Code Online (Sandbox Code Playgroud)
我想我在我的一个控制器中发现了我的问题
application_controller.rb
#facebook stuff
def current_user
@current_user ||= User.find_by_id(session[:user_id])
end
def signed_in?
!!current_user
end
helper_method :current_user, :signed_in?
def current_user=(user)
@current_user = user
session[:user_id] = user.id
end
#facebook stuff
Run Code Online (Sandbox Code Playgroud)
删除此块后,它似乎完美地工作:)
Devise 有一个“范围”的概念,以便您可以同时登录多种类型的用户,例如管理员用户和普通用户。要检查任何范围的用户是否已登录,请使用signed_in?。范围是通过模型类和routes.rb文件的命名来定义的。确保它们匹配。您可以同时发布两个吗?要对此进行测试,您还可以尝试集成测试。
| 归档时间: |
|
| 查看次数: |
3111 次 |
| 最近记录: |