黄瓜+设计 - 签署问题 - > current_user总是为零

时间:2013-07-09 02:47:16

标签: ruby-on-rails devise cucumber capybara

我有一个黄瓜测试,我登录系统,然后检查一些路由

Feature: Donating as a guest

  @javascript
  Scenario: Logged in as an Admin
    Given I login as AdminUser
    And I go to the root page
    And I click button "$20"
    And I click button "Donate"
    And I click link "Donate as Guest >"
    Then I am redirected to "sign_in_or_sign_up" with flash message stating "You're logged in as an Admin"

这是我登录的步骤(注意黄瓜说这会通过):

Given(/^I login as AdminUser$/) do
  admin = Fabricate(:admin_user)
  Fabricate(:fund)

  visit '/admin/admin_users/sign_in'
  fill_in 'Email', :with => admin.email
  fill_in 'Password', :with => admin.password
  click_button 'Sign in'
end

在最后一步的第二步,我点击链接“捐赠为来宾>”,我的资金管理员会检查一下当前用户的登录状态。

if current_user.class == AdminUser

每次点击这里,current_user都是零。我很难过为什么会这样。我甚至尝试过以编程方式登录,但没有去。我错过了某种接线吗?

修改

以下是我的相关路线:

devise_for :admin_users

devise_for :users, :controllers => {:omniauth_callbacks => "user/omniauth_callbacks", :sessions => 'user/sessions', :passwords => 'user/passwords',  :confirmations => 'user/confirmations'}
devise_scope :user do
  get '/user/auth/:provider' => 'user/omniauth_callbacks#passthru'
  get     "/user/sign_in"   => "devise/sessions#new",         :as => :new_user_session
  post    "/user/sign_in"   => "user/sessions#create",      :as => :user_session
  delete  "/user/sign_out"  => "devise/sessions#destroy",     :as => :destroy_user_session
  post    "/user/sign_up"   => "user/registrations#create", :as => :user_registration
  get     "/user/sign_in_or_sign_up" => "user/sessions#sign_in_or_sign_up"
  post    "/user/sign_up_via_dual_login" => "user/registrations#create_via_dual_login"
end

AdminUser model:

class AdminUser < ActiveRecord::Base
  devise :invitable, :database_authenticatable, :registerable,
     :recoverable, :rememberable, :trackable, :validatable, :timeoutable

  attr_accessible(
    :email,
    :password,
    :password_confirmation,
    :remember_me,
    :organization_id,
    :organization_role_id,
    :super_admin,
    :first_name,
    :last_name,
    :receive_transaction_notifications,
    :receive_weekly_transaction_summary
  )

  belongs_to :organization
  has_many :roles, :foreign_key => :api_user_id
  belongs_to :organization_role, :class_name => "UserRole", :foreign_key => "organization_role_id"
  has_many :permissions
  has_many :admin_users_connections
  has_many :people, through: :admin_users_connections
  has_and_belongs_to_many :todos
  has_many :notes, foreign_key: :added_by_id
  has_one :profile

  scope :admins, where( :super_admin => false, active: true)
  scope :super, where(super_admin: true)
  scope :receive_weekly_transaction_summaries, where(receive_weekly_transaction_summary: true)


  def type
    super_admin? && 'SUPER' || 'ADMIN'
  end

  def super?
    super_admin == true
  end
end

1 个答案:

答案 0 :(得分:0)

admin.password是否返回实际密码?还是加密版?

此外,由于您以管理员用户身份登录,因此current_user实际上是current_admin_user。 Devise将根据您的Devise映射创建函数,它并不总是current_user

对于名称空间,对于前

也是如此
namespace :api do
  devise_for :users
end

将使辅助方法为current_api_user