Rails 3 Devise Session имеет значение, но <%, если user_signed_in? %> ложно - PullRequest
5 голосов
/ 15 февраля 2012

Я надеюсь, вы можете помочь, боролись с этим некоторое время сейчас: |Я использую devise и Rails 3

Когда я нажимаю на Sign In, я получаю страницу входа в devise, набираю имя пользователя и pw и нажимаю login.

После того, как я нажал на кнопку входа, я получаюперенаправлен на главную страницу, но теперь я все еще вижу ссылку «Войти», что означает, что <% if user_signed_in?%> все еще ложно.Но кажется, что после входа в систему в переменной сеанса есть некоторые значения, что здесь происходит?Я использовал devise в течение некоторого времени, и раньше у меня не было проблем.Спасибо, ребята! До того, как я вошел в систему с помощью devise

<%= session %>
no value

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

После того, как я вошел в систему с помощью devise

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

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

РЕДАКТИРОВАТЬ:

мой файл route.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

после того, как я удалил этот блок, он, казалось, работал отлично:)

Ответы [ 4 ]

3 голосов
/ 15 февраля 2012

Devise имеет концепцию «областей», так что вы можете одновременно входить в несколько типов пользователей, например, Администратор и обычный пользователь. Чтобы проверить, вошел ли пользователь с областью в область действия , используйте signed_in?. Области определяются именами класса модели и файла routes.rb. Убедитесь, что они совпадают. Вы можете разместить оба? Чтобы проверить это, вы также можете попробовать интеграционный тест.

0 голосов
/ 26 мая 2016

Как сказала @Ирина Назарова.Убедитесь, что в ваш проект не включены никакие методы с тем же именем, которое вы написали сами.Казалось бы, Devise использует это в первую очередь.Это и стало причиной моей проблемы.

0 голосов
/ 07 апреля 2016

Ребята, я боролся с той же проблемой и, наконец, нашел решение! Это может быть не ваш случай, но все же.

Моя проблема возникла, когда я переключался с простого рукописного процесса аутентификации на Devise. А причина почему current_user или user_signed_in? все были пустыми и ложными при входе в систему было то, что у меня были методы с аналогичными именами (sign_in, current_user и т. д.) в моем файле session_helper.rb, которые остались от старой системы, и эти (старые) методы были вызваны из совершенно нового контроллера Devise вместо из правильных из Devise Lib.

Итак, я только что закомментировал все методы в моем старом помощнике сессий, которые обслуживают процесс аутентификации. И тогда это сработало!

0 голосов
/ 12 июня 2012

У меня тоже были проблемы с этим. Это забавно, потому что user_signed_in? должен быть более надежным, чем current_user, но это, кажется, указывает на то, что я подозревал - на самом деле это менее надежно.

Дайте нам знать, если кто-то найдет что-то другое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...