Я хочу переопределить authenticate_user и current_user метод devise gem - PullRequest
12 голосов
/ 21 июня 2011

Я хочу переопределить authenticate_user! и current_user метод devise gem в контроллере моего приложения, пожалуйста, помогите мне с этим Спасибо

Ответы [ 5 ]

8 голосов
/ 13 октября 2011

При переопределении способа аутентификации пользователя:

Devise использует Warden под капотом https://github.com/plataformatec/devise/blob/master/lib/devise/controllers/helpers.rb

Так что вы можете просто добавить новую стратегию в Warden для аутентификации ваших пользователей.См. https://github.com/hassox/warden/wiki/Strategies

Вам не нужно переопределять current_user.С какой проблемой вы сталкиваетесь?Вам нужна другая модель, возвращенная?

6 голосов
/ 21 июня 2011

Возможно, вы сможете сделать это как:

module Devise
  module Controllers
    module Helpers
      def authenticate_user!
        #do some stuff
      end
    end
  end
end   

Но я бы спросил, какова конечная цель, потому что в Devise уже встроена некоторая настраиваемость, и переопределение этих методов заставляет меня задуматься: «зачем вообще использовать Devise?»

5 голосов
/ 09 июня 2016

Если вы хотите добавить код к authenticate_user!

class DuckController < ApplicationController
  before_action :authenticate_duck

  ...

  private

  def authenticate_duck
    #use Devise's method
    authenticate_user!
    #add your own stuff
    unless current_user.duck.approved?
      flash[:alert] = "Your duck is still pending. Please contact support for support."
      redirect_to :back
    end
  end
end
4 голосов
/ 12 ноября 2014

Вы должны создать пользовательский класс для переопределения поведения Devise по умолчанию:

  class CustomFailure < Devise::FailureApp
    def redirect_url
      #return super unless [:worker, :employer, :user].include?(scope) #make it specific to a scope
       new_user_session_url(:subdomain => 'secure')
    end

    # You need to override respond to eliminate recall
    def respond
      if http_auth?
        http_auth
      else
        redirect
      end
    end
  end

А в вашем конфиге / инициализаторах / devise.rb:

  config.warden do |manager|
    manager.failure_app = CustomFailure
  end

Но я предлагаю проверить документацию Devise :)

https://github.com/plataformatec/devise/wiki/How-To:-Redirect-to-a-specific-page-when-the-user-can-not-be-authenticated

0 голосов
/ 13 сентября 2018

На application_controller.rb вы можете перезаписать, как хотите:

def authenticate_user!
  super # just if want the default behavior 
  call_a_method_to_something if current_user
  # or
  call_a_method_to_something if current_user.nil?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...