1

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

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

在最后两步,我单击链接“以访客身份捐赠 >”,我的资金控制器进行检查以查看哪种类型的 current_user 已登录。

if current_user.class == AdminUser

每次点击这里,current_user 都是 nil。我很困惑为什么会这样。我什至尝试过以编程方式登录,但没有成功。我缺少某种接线吗?

编辑:

这是我与此相关的路线:

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

管理员用户模型:

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
4

1 回答 1

0

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

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

这也适用于命名空间,例如

namespace :api do
  devise_for :users
end

会导致辅助方法为current_api_user.

于 2013-07-09T13:53:51.043 回答