How do I login a user with devise?

后端 未结 4 1136
北恋
北恋 2020-12-25 11:05

I have my rails application and I am running into a major issue with devise. I have a controller:

class Users::SessionsController < Devise::SessionsContr         


        
相关标签:
4条回答
  • 2020-12-25 11:22

    I found this post useful for setting up a login for request specs. https://makandracards.com/makandra/37161-rspec-devise-how-to-sign-in-users-in-request-specs

    module DeviseRequestSpecHelpers
    
      include Warden::Test::Helpers
    
      def sign_in(resource_or_scope, resource = nil)
        resource ||= resource_or_scope
        scope = Devise::Mapping.find_scope!(resource_or_scope)
        login_as(resource, scope: scope)
      end
    
      def sign_out(resource_or_scope)
        scope = Devise::Mapping.find_scope!(resource_or_scope)
        logout(scope)
      end
    
    end
    

    Include it in your spec_helper

    RSpec.configure do |config|
      config.include DeviseRequestSpecHelpers, type: :request
    end
    

    And sign in as needed

    sign_in create(:user, name: 'John Doe')

    0 讨论(0)
  • 2020-12-25 11:26

    If you want to sign in a user, use the sign_in helper inside your controller's action:

    sign_in(:user, user)
    
    0 讨论(0)
  • 2020-12-25 11:33

    Here is how standard create actions works:

      # POST /resource/sign_in
      def create
        self.resource = warden.authenticate!(auth_options)
        set_flash_message!(:notice, :signed_in)
        sign_in(resource_name, resource)
        yield resource if block_given?
        respond_with resource, location: after_sign_in_path_for(resource)
      end
    

    https://github.com/plataformatec/devise/blob/master/app/controllers/devise/sessions_controller.rb#L18

    0 讨论(0)
  • 2020-12-25 11:36
      resource = warden.authenticate!(:scope => resource_name)
       sign_in(resource_name, resource)
    
    0 讨论(0)
提交回复
热议问题