Как я могу перенаправить на разные пути выхода, используя Rails и Devise - PullRequest
1 голос
/ 26 марта 2012

Я использую rails3 и gem devise, и у меня две роли: администратор и клиент, и я хочу, чтобы после того, как пользователь

вышел, администратор должен перенаправить на другой путь, а клиент должен перенаправить на другой путь

когда выйдешь ..

Ответы [ 3 ]

3 голосов
/ 26 марта 2012

Вы можете получить желаемую функциональность, используя метод devise после пути sign_out.

, но перед тем, как определить эти методы в помощнике приложений.

def is_admin?(user)
  admin_role = Role.find(:first, :conditions => ["name = ?", "admin"])
  return user.roles.include?(admin_role)
end


def is_customer?(user)
  admin_role = Role.find(:first, :conditions => ["name = ?", "customer"])
  return user.roles.include?(admin_role)
end

После этого включите помощник приложения в контроллер приложения.и определите этот метод

def after_sign_out_path_for(resource_or_scope)
  if is_admin?(current_user)
    home_path = "/admin/users/sign_in"
  elsif is_customer?(current_user)
    home_path = "/customer"
  end
    respond_to?(home_path, true) ? send(root_path) : home_path

end

Надеюсь, он будет работать нормально !!!

2 голосов
/ 23 мая 2013

Вы можете переопределить метод after_sign_out_path_for (resource) , который использует devise.Просто отметьте логику или просто желаемый путь перенаправления после проверки ролей вашего пользователя в методе.Действие уничтожения сеанса devise вызывает путь перенаправления через этот метод.

def after_sign_out_path_for(resource)
  #logic
end

Надеюсь, это полезно ..

0 голосов
/ 26 марта 2012

Devise README содержит инструкции по настройке пользовательских маршрутов и контроллеров. Короче говоря, вы хотите настроить маршруты для каждой модели, например:

devise_for :admins,    :controllers => { :sessions => "admins/sessions" }
devise_for :customers, :controllers => { :sessions => "customers/sessions" }

Затем создайте соответствующие контроллеры и переопределите Devise::SessionsController#destroy, например ::

class Admins::SessionsController < Devise::SessionsController
  def destroy
    super

    redirect_to ...
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...