2015-01-31 3 views
1

Я знаю, что этот вопрос задан несколько раз, но почему-то это не работает для меня. Я хотел бы, чтобы пользователь был перенаправлен на определенную страницу после входа в систему (с помощью программы Devise). Я использую Rails 3.2 и Ruby 4.Перенаправление после входа с помощью Devise

Как только пользователь перенаправляется на: - После входа в систему они перенаправляются в корень, если пользователь добрался до страницы входа с одной из страниц, контролируемых контроллер, частью которого является корневой путь. Эти страницы не требуют авторизации. - После входа в систему они перенаправляются на запрашиваемую страницу, если пользователь автоматически попал на страницу входа в систему, нажав на страницу, требующую авторизации.

Чтобы перенаправить пользователя после входа на определенную страницу, я понимаю, что вам нужно добавить в контроллер несколько строк. Контроллеру, который контролирует страницы, требующие авторизации, я добавил:

class AccountsController < ApplicationController 
    before_filter :authenticate_user! 

    def user1_home 
    end 
    def user2_home 
    end 
    def user3_home 
    end 

    protected 
    def after_sign_in_path_for(resource) 
     'accounts/user1_home' 
    end 
end 

Однако это ничего не меняет. Я также пробовал это с def after_sign_in_path_for(resource) 'accounts#user1_home_path' end

Должен ли я, возможно, изменить что-то в маршрутах.rb? Мои маршруты:

 new_user_session GET /users/sign_in(.:format)   devise/sessions#new 
      user_session POST /users/sign_in(.:format)   devise/sessions#create 
    destroy_user_session DELETE /users/sign_out(.:format)   devise/sessions#destroy 
      user_password POST /users/password(.:format)   devise/passwords#create 
     new_user_password GET /users/password/new(.:format)  devise/passwords#new 
     edit_user_password GET /users/password/edit(.:format) devise/passwords#edit 
         PUT /users/password(.:format)   devise/passwords#update 
cancel_user_registration GET /users/cancel(.:format)   devise/registrations#cancel 
     user_registration POST /users(.:format)     devise/registrations#create 
    new_user_registration GET /users/sign_up(.:format)   devise/registrations#new 
    edit_user_registration GET /users/edit(.:format)    devise/registrations#edit 
         PUT /users(.:format)     devise/registrations#update 
         DELETE /users(.:format)     devise/registrations#destroy 
     user_confirmation POST /users/confirmation(.:format)  devise/confirmations#create 
    new_user_confirmation GET /users/confirmation/new(.:format) devise/confirmations#new 
         GET /users/confirmation(.:format)  devise/confirmations#show 
        toc GET /toc(.:format)     pages#toc 
      stakeholder GET /stakeholder(.:format)   pages#stakeholder 
        about GET /about(.:format)     pages#about 
    doelgroep_onderneming GET /doelgroep_onderneming(.:format) pages#doelgroep_onderneming 
      doelgroep_ngo GET /doelgroep_ngo(.:format)   pages#doelgroep_ngo 
      doelgroep_se GET /doelgroep_se(.:format)   pages#doelgroep_se 
      partnership GET /partnership(.:format)   pages#partnership 
       contact GET /contact(.:format)    pages#contact 
    account_stakeholder GET /account/stakeholder(.:format) accounts#stakeholder_home 
     account_business GET /account/business(.:format)  accounts#business_home 
      account_admin GET /account/admin(.:format)   accounts#admin_home 
        root  /        pages#index 
+0

Вы сами создали учетную записьController? –

+0

Да, я создал accountController с «rails generate controller Accounts», а затем сам отредактировал его. – Nick

ответ

2

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

Разрабатывают содержит инструкции по GitHub для выполнения этого: https://github.com/plataformatec/devise/wiki/How-To:-redirect-to-a-specific-page-on-successful-sign-in

Вам нужно переместить after_sign_in_path_for к классу ApplicationController, и вы не должны иметь 'accounts/user1_home'. Чтобы перейти к правильному URL-адресу для каждого использования, у вас должно быть что-то вдоль линий user_path (@user), но у меня недостаточно кода, чтобы точно знать, что использовать. Вы должны запустить в окне консоли команду rake routes, чтобы узнать, какие маршруты вы сделали доступными. Подробнее о маршрутизации по адресу: http://guides.rubyonrails.org/routing.html

+0

Названия методов, возможно, немного вводят в заблуждение. Это три разных вида, поскольку представления различаются для каждого пользователя. Таким образом, вы видите user1, 2 и 3, так как эти вызовы называются. Я добавлю свои маршруты к моему вопросу. – Nick

+0

Спасибо, перемещение '' 'protected def after_sign_in_path_for (resource) '/ account/user1_home' end''', чтобы ApplicationController решил его. – Nick

0

Если это аутентифицированная страница они пытались получить доступ перед входом в вы хотите перенаправлять, то вы можете просто сделать это таким образом, в вашем ApplicationController:

def after_sign_in_path_for(resource) 
    if session[:user_return_to] == nil 
    your_actual_next_path 
    else 
    super 
    end 
end 
1

Да. Установите следующие данные в любой момент (до или после входа в систему):

session["user_return_to"] = request.original_url # Will redirect the user to where they came from 
+0

где установить это? – vipin8169

Смежные вопросы