2014-10-24 4 views
0

Я хочу, чтобы перенаправить обратно на текущую страницу после того, как OAuth зарегистрировались, и я последовал за this Devise wiki и сделал следующее:перенаправление на текущую страницу с помощью OmniAuth и разработать

def after_sign_in_path_for(resource) 
    sign_in_url = new_user_session_url 
    if request.referer == sign_in_url 
     super 
    else 
     request.env['omniauth.origin'] || stored_location_for(resource) || request.referer || root_path 
    end 
    end 

request.env['omniauth.origin'] является http://www.bubutravel.com/users/sign_in

stored_location_for(resource) равна нулю

request.referer является http://openapi.qzone.qq.com/oauth/[omitted] (мой провайдер)

Итак, после моего входа в систему omniauth, я снова перенаправляюсь к URL-адресам провайдера.

Википедия устарела? Какой рекомендуемый способ сделать omniauth login перенаправлен на текущую страницу?

ответ

4

Я понял, что не должен переопределять after_sign_in_path_for как предложено wiki. Я должен просто записать путь в каждом запросе:

before_action :store_current_location, :unless => :devise_controller? 
    def store_current_location 
    store_location_for(:user, request.url) 
    end 

И строить в after_sign_in_path_for будет справиться с остальными.

+0

Сохраните мой день. Большое спасибо! – Cyrill

+0

Ничего себе. Я провел недели, пытаясь понять, что это ... так просто. Спасибо! – Haymaker87

+0

Небольшое уведомление: вы должны хранить местоположение только для запросов xhr, чтобы исключить неизвестное исключение маршрута: '' 'store_location_for (: user, request.url), если request.xhr?' '' – Darkside

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