使用has_secure_password和会话进行身份验证

时间:2013-05-21 18:16:26

标签: ruby-on-rails ruby session

    class User < ActiveRecord::Base
        has_secure_password
        attr_accessor :account

        has_one :company 
        has_one :employee
        has_many :messages

        def self.authenticate(user, password)
            user = User.find_by_user(user)

            unless user && user.authenticate(password)
                redirect_to new_session_path
            end

            user        
        end 

    end

由于某种原因,我没有得到unless条件内的代码,不识别任何rails代码,如redirect_to new_session_path或任何其他路径,并抛出此:

NameError in SessionsController#create

undefined local variable or method "new_session_path" for #<Class:0x2f0e998>

我确实尝试了raise,但是一样,有人知道为什么会这样吗? 谢谢你的帮助。

堆栈跟踪

activerecord (3.2.1) lib/active_record/dynamic_matchers.rb:50:in "method_missing"
app/models/user.rb:14:in "authenticate"
app/controllers/sessions_controller.rb:6:in "create"
actionpack (3.2.1) lib/action_controller/metal/implicit_render.rb:4:in "send_action"
actionpack (3.2.1) lib/abstract_controller/base.rb:167:in "process_action"
actionpack (3.2.1) lib/action_controller/metal/rendering.rb:10:in "process_action"
actionpack (3.2.1) lib/abstract_controller/callbacks.rb:18:in "block in process_action"
activesupport (3.2.1) lib/active_support/callbacks.rb:414:in "_run__439917834__process_action__1037818096__callbacks"
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in "__run_callback"
activesupport (3.2.1) lib/active_support/callbacks.rb:385:in "_run_process_action_callbacks"
activesupport (3.2.1) lib/active_support/callbacks.rb:81:in "run_callbacks"
actionpack (3.2.1) lib/abstract_controller/callbacks.rb:17:in "process_action"
actionpack (3.2.1) lib/action_controller/metal/rescue.rb:29:in "process_action"
actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:30:in "block in process_action"
activesupport (3.2.1) lib/active_support/notifications.rb:123:in "block in instrument"
activesupport (3.2.1) lib/active_support/notifications/instrumenter.rb:20:in "instrument"
activesupport (3.2.1) lib/active_support/notifications.rb:123:in "instrument"
actionpack (3.2.1) lib/action_controller/metal/instrumentation.rb:29:in "process_action"
actionpack (3.2.1) lib/action_controller/metal/params_wrapper.rb:205:in "process_action"
activerecord (3.2.1) lib/active_record/railties/controller_runtime.rb:18:in "process_action"
actionpack (3.2.1) lib/abstract_controller/base.rb:121:in "process"
actionpack (3.2.1) lib/abstract_controller/rendering.rb:45:in "process"
actionpack (3.2.1) lib/action_controller/metal.rb:203:in "dispatch"
actionpack (3.2.1) lib/action_controller/metal/rack_delegation.rb:14:in "dispatch"
actionpack (3.2.1) lib/action_controller/metal.rb:246:in "block in action"
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in "call"
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:66:in "dispatch"
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:30:in "call"
journey (1.0.4) lib/journey/router.rb:68:in "block in call"
journey (1.0.4) lib/journey/router.rb:56:in "each"
journey (1.0.4) lib/journey/router.rb:56:in "call"
actionpack (3.2.1) lib/action_dispatch/routing/route_set.rb:589:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/best_standards_support.rb:17:in "call"
rack (1.4.5) lib/rack/etag.rb:23:in "call"
rack (1.4.5) lib/rack/conditionalget.rb:35:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/head.rb:14:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/params_parser.rb:21:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/flash.rb:242:in "call"
rack (1.4.5) lib/rack/session/abstract/id.rb:210:in "context"
rack (1.4.5) lib/rack/session/abstract/id.rb:205:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/cookies.rb:338:in "call"
activerecord (3.2.1) lib/active_record/query_cache.rb:64:in "call"
activerecord (3.2.1) lib/active_record/connection_adapters/abstract/connection_pool.rb:443:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:28:in "block in call"
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in "_run__813925422__call__171472149__callbacks"
activesupport (3.2.1) lib/active_support/callbacks.rb:405:in "__run_callback"
activesupport (3.2.1) lib/active_support/callbacks.rb:385:in "_run_call_callbacks"
activesupport (3.2.1) lib/active_support/callbacks.rb:81:in "run_callbacks"
actionpack (3.2.1) lib/action_dispatch/middleware/callbacks.rb:27:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/reloader.rb:65:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/remote_ip.rb:31:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/debug_exceptions.rb:16:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/show_exceptions.rb:56:in "call"
railties (3.2.1) lib/rails/rack/logger.rb:26:in "call_app"
railties (3.2.1) lib/rails/rack/logger.rb:16:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/request_id.rb:22:in "call"
rack (1.4.5) lib/rack/methodoverride.rb:21:in "call"
rack (1.4.5) lib/rack/runtime.rb:17:in "call"
activesupport (3.2.1) lib/active_support/cache/strategy/local_cache.rb:72:in "call"
rack (1.4.5) lib/rack/lock.rb:15:in "call"
actionpack (3.2.1) lib/action_dispatch/middleware/static.rb:53:in "call"
railties (3.2.1) lib/rails/engine.rb:479:in "call"
railties (3.2.1) lib/rails/application.rb:220:in "call"
rack (1.4.5) lib/rack/content_length.rb:14:in "call"
railties (3.2.1) lib/rails/rack/log_tailer.rb:14:in "call"
rack (1.4.5) lib/rack/handler/webrick.rb:59:in "service"
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:138:in "service"
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/httpserver.rb:94:in "run"
C:/RailsInstaller/Ruby1.9.3/lib/ruby/1.9.1/webrick/server.rb:191:in "block in start_thread"

2 个答案:

答案 0 :(得分:0)

将此内容写入您的用户模型。

 include Rails.application.routes.url_helpers

,或者

使用而不是new_session_path

Rails.application.routes.url_helpers.new_session_path

答案 1 :(得分:0)

模型不应该负责重定向,因为这是控制器的责任。尝试将重定向拉出模型并进入控制器。 authenticate方法应该只验证用户是否有效,并让控制器根据该结果采取适当的操作。