2012-02-15 20 views
5

Tôi hy vọng bạn có thể giúp đỡ, đã đấu tranh với vấn đề này trong một thời gian: | Im sử dụng thiết lập và Rails 3Rails 3 Devise Session Có giá trị nhưng <% nếu user_signed_in? %> là false

Khi tôi nhấp vào Đăng nhập, tôi nhận được trang đăng nhập, tôi nhấn vào tên người dùng và pw và nhấp vào đăng nhập.

Sau khi tôi nhấp vào đăng nhập, tôi được chuyển hướng đến trang chính nhưng bây giờ tôi vẫn thấy liên kết Đăng nhập, có nghĩa là <% nếu user_signed_in? %> vẫn sai. Nhưng có vẻ như có một số giá trị trong biến phiên sau khi tôi đăng nhập, điều gì đang xảy ra ở đây? Tôi đã được sử dụng devise cho một thời gian và havent đã có bất kỳ vấn đề trước. Cảm ơn!


Trước khi tôi đăng nhập với devise

<%= session %> 
no value 

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

Sau khi tôi đăng nhập với devise

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

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

EDIT:

tập tin routes.rb tôi

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 

Tôi nghĩ rằng tôi thấy vấn đề của tôi trong một trong các bộ điều khiển của tôi

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 

sau khi tôi loại bỏ khối này nó dường như làm việc một cách hoàn hảo :)

+2

Tôi luôn sử dụng 'if current_user' :) –

+0

Giống như kishie. Tôi cũng luôn kiểm tra endup cho current_user. Điều đó có sẵn không? – zsquare

+1

Cảm ơn bạn rất nhiều! Bạn chấm dứt sự thất vọng của tôi. – Brett

Trả lời

3

lập mưu có một khái niệm về "phạm vi "để bạn có thể đăng nhập đồng thời nhiều loại người dùng, ví dụ: người dùng quản trị và người dùng thông thường. Để kiểm tra xem người dùng có bất kỳ phạm vi nào được đăng nhập hay không, hãy sử dụng signed_in?. Phạm vi được xác định bằng cách đặt tên của lớp mô hình và tệp routes.rb. Hãy chắc chắn rằng họ phù hợp. Bạn có thể đăng cả hai? Để kiểm tra điều này, bạn cũng có thể thử kiểm tra tích hợp.

+0

signed_in? không hoạt động, cùng một kết quả – Francois

+0

Bạn cũng có thể đăng tệp user.rb của mình không? –

0

Tôi cũng gặp sự cố với vấn đề này. Thật buồn cười vì user_signed_in? được cho là đáng tin cậy hơn current_user, nhưng điều này dường như chỉ ra những gì tôi nghi ngờ - rằng nó thực sự ít đáng tin cậy hơn.

Hãy cho chúng tôi biết nếu ai đó tìm thấy điều gì đó khác biệt.

0

Mọi người, tôi đã đấu tranh với cùng một vấn đề và cuối cùng đã tìm được giải pháp! Nó có thể không phải là trường hợp của bạn, nhưng vẫn còn.

Sự cố của tôi xảy ra khi tôi chuyển từ quy trình xác thực viết tay đơn giản thành Devise. Và lý do tại sao current_user hoặc user_signed_in? tất cả đều trống và sai khi đăng nhập là tôi có các phương thức có tên tương tự (sign_in, current_user, v.v.) trong tệp session_helper.rb của mình vẫn còn từ hệ thống cũ và các phương thức (cũ) này được gọi từ bộ điều khiển Devise mới thay thế của những người thích hợp từ Devise lib.

Vì vậy, tôi vừa nhận xét tất cả các phương pháp trong trợ giúp phiên cũ của tôi phục vụ quá trình xác thực. Và sau đó nó đã hoạt động!

0

Như @Irina Nazarova cho biết. Kiểm tra để đảm bảo rằng bạn không có bất kỳ phương pháp nào giống như tên bạn đã tự viết cho mình trong dự án của bạn. Có vẻ như Devise đang sử dụng nó trước tiên. Đây là những gì đã gây ra vấn đề của tôi.

Các vấn đề liên quan