簡體   English   中英

Rails 3設計會話有值但<%if user_signed_in? %>是假的

[英]Rails 3 Devise Session Has value but <% if user_signed_in? %> is false

我希望你能幫忙,現在已經在這個問題上掙扎了一段時間:| 我正在使用設計和Rails 3

當我點擊登錄時,我得到設計登錄頁面,我打入用戶名和pw並單擊登錄。

點擊登錄后,我被重定向到主頁面,但現在我仍然看到登錄鏈接,這意味着<%if user_signed_in? %>仍然是假的。 但是我登錄后似乎會話變量中有一些值,這里發生了什么? 我一直在使用設計並且之前沒有任何問題。 謝謝你們!


在我用設計登錄之前

 <%= session %> no value <% if user_signed_in? %> **is false** 

我用設計登錄后

 <%= session %> _csrf_tokenAMUwVLu6G6rWfKICB43PYApFsYFRjVyJDSc2oU88uEk=warden.user.user.keyUser342$2a$10$.zslfggeUqvq.m/5LNSolOsession_id0db80c26bc36a4c1c74c223655dcb092 <% if user_signed_in? %> **is false** 

編輯:

我的routes.rb文件

 Cybercellar3::Application.routes.draw do devise_for :users get "home/index" 


 <% if signed_in? %> **is still false** 

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 

我想我在我的一個控制器中發現了我的問題

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 

刪除此塊后,它似乎完美地工作:)

Devise有一個“范圍”概念,因此您可以同時登錄多種類型的用戶,例如管理員用戶和普通用戶。 要檢查是否已登錄任何范圍的用戶,請使用signed_in? 范圍由模型類和routes.rb文件的命名定義。 確保它們匹配。 你能發布兩個嗎? 要測試它,您還可以嘗試集成測試。

我也一直遇到這個問題。 這很有趣因為user_signed_in? 應該比current_user更可靠,但這似乎表明我懷疑 - 它實際上不太可靠。

如果有人發現不同的東西,請告訴我們。

伙計們,我一直在努力解決同樣的問題,最后找到了解決方案! 可能不是你的情況,但仍然如此。

當我從簡單的手寫身份驗證過程切換到Devise時出現了我的問題。 而current_user或user_signed_in的原因是什么? 在登錄時我都是空白和假的,我在我的sessions_helper.rb文件中有類似的命名方法(sign_in,current_user等),這些方法保留在舊系統中,而這些(舊的)方法是從一個全新的Devise控制器調用的來自Devise lib的正確版本。

所以我只是注釋了我的舊會話助手中提供身份驗證過程的所有方法。 然后它奏效了!

正如@Irina Nazarova所說。 檢查以確保您沒有任何與您自己編寫的項目名稱相同的方法。 似乎Devise首先使用它。 這就是造成我的問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM