2012-02-15 8 views
5

私はあなたが助けてくれることを願っています。 私はdeviseとRails 3を使用しています。Rails 3 Deviseセッションに値はありますが、<%if user_signed_in? %>は偽です

私がサインインをクリックすると、私はdeviseサインインページが表示され、ユーザー名とpwにパンチしてログインをクリックします。

ログインをクリックした後、メインページにリダイレクトされましたが、まだサインインリンクが表示されています。つまり、user_signed_inの場合は<%でしょうか? %>はまだfalseです。しかし、ログインした後にセッション変数にいくつかの値があるようですが、ここで何が起こっていますか?私はしばらくの間deviseを使用しており、以前は何の問題もなかった。みんなありがとう!


私は工夫

<%= session %> 
_csrf_tokenAMUwVLu6G6rWfKICB43PYApFsYFRjVyJDSc2oU88uEk=warden.user.user.keyUser342$2a$10$.zslfggeUqvq.m/5LNSolOsession_id0db80c26bc36a4c1c74c223655dcb092 

<% if user_signed_in? %> 
**is false** 

EDITでログインした後、私は工夫

<%= session %> 
no value 

<% 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 

を私の問題を見つけたと思う:)

+2

私はいつも 'current_user'を使用します:) –

+0

kishieと同じです。私はまた、常にcurrent_userをチェックしている。それは利用可能ですか? – zsquare

+1

ありがとう!あなたは私の欲求不満に終止符を打つ。 – Brett

答えて

3

工夫がスコープ」の概念を持っています"ので、同時に複数のタイプのユーザーにサインインすることができます。管理ユーザーと通常ユーザーの両方が使用できます。 のユーザーがスコープにログインしているかどうかを確認するには、signed_in?を使用してください。スコープは、モデルクラスとroutes.rbファイルの命名によって定義されます。一致するようにしてください。両方を投稿できますか?これをテストするには、統合テストを試すこともできます。

+0

signed_in?どちらもうまく動作しません。同じ結果 – Francois

+0

user.rbファイルも投稿できますか? –

0

私もこれに問題があります。 user_signed_in?current_userよりも信頼できると思われるので面白いですが、これは私が疑ったことを示しているようです。実際はそれほど信頼できません。

誰かが別のものを見つけたらお知らせください。

0

皆さん、私は同じ問題で苦労しており、最終的に解決策を見つけました!あなたの場合ではないかもしれませんが、それでも。

単純な手書き認証プロセスからDeviseに切り替えるときに問題が発生しました。そして、なぜcurrent_userまたはuser_signed_in?古いシステムから残っているsessions_helper.rbファイルに同様の名前のメソッド(sign_in、current_userなど)があり、代わりにこれらの(古い)メソッドが新しいDeviseコントローラから呼び出されたということですDeviseのlibから正しいものを選んでください。

私は認証プロセスに役立つ古いセッションヘルパーのすべてのメソッドをコメントアウトしました。そして、それは働いた!

0

@Irina Nazarovaが言いました。あなたのプロジェクトにあなた自身が書いたのと同じ名前のメソッドがないことを確認してください。 Deviseが最初に使っているようです。これが私の問題を引き起こしていたのです。

関連する問題