2012-02-28 31 views
8

Trên trang web 2.3.8 đường ray Tôi có liên kết đăng nhập trên mỗi trang (đưa người dùng đến trang đăng nhập riêng). Sau khi đăng nhập thành công, người dùng hiện được chuyển hướng đến thư mục gốc. Thay vào đó, tôi muốn chuyển hướng đến trang họ đã xem trước đây.Đưa người dùng trở về trang trước sau khi đăng nhập (Rails)

Tôi đã cố gắng sử dụng request.referer:

redirect_back_or_default(request.referer) 

đâu redirect_back_or_default:

def redirect_back_or_default(default) 
    redirect_to(session[:return_to] || default) 
    session[:return_to] = nil 
end 

Nhưng điều đó tạo ra một "access denied" lỗi, mặc dù đăng nhập thành công.

+0

Điều này có vẻ đúng, bạn có chắc chắn rằng họ đang thực sự đăng nhập không? – Chap

+0

Có chắc chắn họ đang đăng nhập (có thể xem các trang trước đó không thể truy cập, thay đổi liên kết đăng nhập vào liên kết trang người dùng, thay đổi liên kết đăng nhập để đăng xuất, v.v.). Lỗi xảy ra ngay cả khi người dùng đang đăng nhập từ gốc. – Exupery

+0

Bạn có thể đăng mã bộ điều khiển phiên của mình không? – PhillipKregg

Trả lời

13

Thay vì cố gắng chuyển hướng đến giới thiệu, tôi sẽ thiết lập các phiên [: return_to]

Bạn sẽ cần một trước khi lọc chạy trước khi xác thực của bạn trên tất cả các hành động của bạn:

def store_return_to 
    session[:return_to] = request.url 
end 

Sau đó, thay đổi chuyển hướng của bạn thành chỉ

redirect_back_or_default() 
+0

Chính xác những gì tôi đang tìm kiếm, điều này rất hữu ích! – Exupery

+0

Cảm ơn vì điều này, tôi mất nhiều giờ để tìm và các câu trả lời khác trong StackOverflow không hoạt động. – kakubei

+0

Vâng. Đây là một giải pháp không phát triển tốt. Đó là những gì tôi đã gặp khó khăn trong việc tìm kiếm, vì vậy tôi nghĩ rằng tôi sẽ gõ "không sử dụng Devise" ở đây trong các ý kiến ​​để dễ tìm hơn! –

Các vấn đề liên quan