AuthLogic UserSessions 控制器返回零 [英] AuthLogic UserSessions Controller Returning Nil

查看:82
本文介绍了AuthLogic UserSessions 控制器返回零的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经设置了一个新的 Rails 应用程序,并且正在使用 Authlogic 进行身份验证.

I've set up a new Rails app and am using Authlogic for authentication.

我很高兴 CRUD 用户,但用户会话似乎存在问题.

I can happily CRUD users but there seems to be an issue with User Sessions.

错误信息:

undefined method `create' for nil:NilClass
app/controllers/user_sessions_controller.rb:9:in `create'

app/models/user.rb

class User < ActiveRecord::Base
  acts_as_authentic
end

app/controllers/user_sessions_controller.rb

class UserSession < Authlogic::Session::Base
end

app/models/user_session.rb

class UserSessionsController < ApplicationController

  def new
    @user_sesssion = UserSession.new
  end    

  def create
    @user_sesssion = UserSession.new(params[:user_session])
    if @user_session.create 
      flash[:notice] = "Welcome back!"
      redirect_to root_path
    else
      render :new
    end
  end

  def destroy
    @user_session = UserSession.find
    @user_session.destroy
    redirect_to root_path
  end
end

app/views/user_sessions

= simple_form_for @user_session do |f|

  = f.error_notification

  = f.input :username, :label => false, :placeholder => "User name", :required => true, :input_html => {:size => 15, :class => "signin_input"}

  = f.input :password, :label => false, :placeholder => "Password", :required => true, :input_html => {:size => 15, :class => "signin_input"}
  = f.button :submit, "Sign in", :class => "a small"

db/schema.rb

  create_table "users", :force => true do |t|
    t.string   "username",          :null => false
    t.string   "email",             :null => false
    t.string   "crypted_password",  :null => false
    t.string   "password_salt",     :null => false
    t.string   "persistence_token", :null => false
    t.string   "perishable_token"
    t.datetime "created_at"
    t.datetime "updated_at"
  end

  add_index "users", ["email"], :name => "index_users_on_email"
  add_index "users", ["perishable_token"], :name => "index_users_on_perishable_token"
  add_index "users", ["persistence_token"], :name => "index_users_on_persistence_token"
  add_index "users", ["username"], :name => "index_users_on_username"

Gemfile

gem 'rails', '3.1.3'
gem 'pg'
gem 'heroku'
gem 'authlogic'
gem 'will_paginate'
gem 'simple_form'

group :assets do
  gem 'sass-rails',   '~> 3.1.5'
  gem 'coffee-rails', '~> 3.1.1'
  gem 'uglifier', '>= 1.0.3'
  gem 'haml-rails'
  gem 'zurb-foundation'
end

gem 'jquery-rails'


gem 'rspec-rails', :group => [:test, :development]

group :test do
  gem 'factory_girl_rails'
  gem 'capybara'
  gem 'guard-rspec'
end 

config/routes.rb

  resource :users
  resource :user_sessions 

  match 'signin', :to => "user_sessions#new"
  match 'signout', :to => "user_sessions#destroy"

  get "pages/home"
  root :to => 'pages#home'

经过更多的尝试,它似乎是 Authlogic::Session::Base 的问题

After some more playing around it seems to be an issue with Authlogic::Session::Base

1.9.2-p290 :019 > session = UserSession.new(:username => "test", :password => "password")
Authlogic::Session::Activation::NotActivatedError: You must activate the Authlogic::Session::Base.controller with a controller object before creating objects
    from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/authlogic-3.1.0/lib/authlogic/session/activation.rb:47:in `initialize'
    from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/authlogic-3.1.0/lib/authlogic/session/klass.rb:55:in `initialize'
    from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/authlogic-3.1.0/lib/authlogic/session/scopes.rb:79:in `initialize'
    from (irb):19:in `new'
    from (irb):19
    from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
    from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
    from /Users/vlad/.rvm/gems/ruby-1.9.2-p290@fitafy/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
    from script/rails:6:in `require'
    from script/rails:6:in `<main>'

我已编辑 application_controller.rb 以尝试克服上述错误,但结果仍然相同

I've edited application_controller.rb to try to overcome the error above but still the same result

  before_filter :activate_authlogic

  private

    def activate_authlogic
      Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
    end

红宝石 1.9.2Mac OS X 10.7.2 (Lion)

Ruby 1.9.2 Mac OS X 10.7.2 (Lion)

我在这里遗漏了什么?

推荐答案

你有一个错别字,你在 user_session 拼写了一个额外的 s.此外,您要在会话中调用 save,而不是 `create.

You've got a typo, you've spelled user_session with an extra s. In addition it's save you want to call on the session, not `create.

这篇关于AuthLogic UserSessions 控制器返回零的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆