Есть ли способ в Devise 1.0, библиотеке Rails 2.3, перенаправить на определенный URL-адрес, а не root_url после входа?
EDIT: забыл упомянуть об этом Devise 1.0
Есть ли способ в Devise 1.0, библиотеке Rails 2.3, перенаправить на определенный URL-адрес, а не root_url после входа?
EDIT: забыл упомянуть об этом Devise 1.0
Скорее всего, ваш пользователь перенаправляется до вызова after_sign_in_path
. Это происходит, если пользователь пытается перейти на страницу, защищенную аутентификацией напрямую. Это будет происходить все время, если у вас есть root_path
('/'), защищенный аутентификацией.
Обсуждаются группы google по этой теме:
Быстрое и грязное решение состоит в том, чтобы перезаписать stored_location_for
, чтобы всегда возвращать nil
так:
class ApplicationController < ActionController::Base
...
private
def stored_location_for(resource_or_scope)
nil
end
def after_sign_in_path_for(resource_or_scope)
my_favorite_path
end
end
Я думаю, что метод after_sign_in_path_for
в Devise - это то, что вы ищете.
Определите этот метод в вашем ApplicationController, и он переопределит реализацию Devise по умолчанию. Это то, что указано в документации.
Подробности здесь: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for
Предположим, вы хотите показать панель управления пользователя после входа в систему.
class HomesController < ApplicationController
def index
if current_user //returns nil if not logged in
@users = User.all
render :dashboard
end
end
def dashboard
@users = User.all
end
end
в routes.rb:
root :to => 'homes#index'
Если вход в систему, if-block вводится в действие индекса, а dashboard.erb отображается. (обязательно инициализируйте все переменные, требуемые dashboard.erb, в вашем if-блоке) В противном случае rails отображает index.erb