2012-04-07 34 views
9

Đây là những gì tôi có để chuyển hướng đến url mặc định (myapp_url). Nhưng tôi muốn thay đổi chuyển hướng để đi url yêu cầu được nhập bởi người dùng sau khi xác thực. Tôi làm như thế nào? Tôi đã thử vài tùy chọn để tìm kiếm ở đây, như: quay lại. Nhưng không đi.đường ray ruby ​​- chuyển hướng đến url yêu cầu ban đầu

Người dùng nhập url, nếu không được xác thực rồi được chuyển hướng đến trang đăng nhập, sau đó sau khi người dùng đăng nhập sẽ được chuyển hướng đến url yêu cầu ban đầu.

def create 
    user = User.Authenticate(params[:user_id], params[:password]) 
if user 
    session[:user_id] = user.id 
    redirect_to myapp_url, :notice => "Logged in!" 
else 
    flash.now.alert = "Invalid email or password" 
    render "new" 
    end 

end 
+0

Bạn đã tìm thấy giải pháp chưa? –

+0

@ Aldo'xoen'Giambelluca - Chưa. –

+0

Giải pháp này phù hợp với tôi: http://stackoverflow.com/questions/9835365/devise-how-to-redirect-to-different-page-based-on-some-parameter-after-sign-in – rassom

Trả lời

1

Bạn cần lưu đường dẫn trong phiên trước khi chuyển hướng xác thực và sau khi chuyển hướng xác thực thành công sang đường dẫn này.

+0

I đã thử điều này, nhưng không may mắn. 'session [: return_to] || = request.referer'' redirect_to session [: return_to] ' –

12

Bạn có thể đọc the chapter about "Friendly forwarding" trong "Hướng dẫn Ruby on Rails" của Michael Hartl để xem cách bạn có thể dễ dàng triển khai.

Về cơ bản bạn có 3 phương pháp helper:

  1. store_location để lưu trữ người dùng mong muốn vị trí trong phiên
  2. redirect_back_or(url) chuyển hướng người dùng đến vị trí lưu trữ trong phiên giao dịch hoặc, nếu không được thiết lập, đến vị trí chứa trong url phương pháp param
  3. clear_return_to sử dụng "nội bộ" theo phương pháp redirect_back_or để xóa phần thông tin này từng được sử dụng

Và sau đó bạn sử dụng các phương pháp sau:

A) khi bạn thấy người dùng khách cố truy cập trang cần sử dụng xác thực store_location trước khi chuyển hướng anh ấy đến trang đăng nhập.
B) khi người dùng đăng nhập, bạn sử dụng redirect_back_or(url) để chuyển hướng ông đến đúng vị trí (nếu có tất nhiên)

Đây là một cái nhìn tổng quan về cách làm việc này, bạn sẽ có được ý tưởng nhưng tôi đề nghị để đọc mà chương để thực hiện (vài) chi tiết.

+0

Điều này có thể được thực hiện với một yêu cầu đăng không? Giả sử bạn đang gửi biểu mẫu và phiên hết hạn trước khi gửi. Ví dụ Michael Hartles sẽ gây ra lỗi định tuyến. Tôi nghĩ rằng Rails sẽ cố gắng nhận được yêu cầu sau khi đăng nhập. Ví dụ: giả sử bạn có 'Bài viết' và' nhận xét', trong đó các nhận xét được lồng trong bài đăng và nhận xét gửi đến từ Bài đăng # Bài đăng. URL kết quả sau khi đăng nhập sẽ là 'app.com/posts/1/comments' gây ra lỗi định tuyến, điều này sẽ không xảy ra nếu yêu cầu là một POST. – Mohamad

+1

Chuyển hướng được gửi bởi trình duyệt dưới dạng yêu cầu GET. Ngay cả khi bạn có trình duyệt chuyển hướng dưới dạng POST, dữ liệu gửi biểu mẫu ban đầu sẽ không được cung cấp. – kgilpin

+0

Liên kết hướng dẫn trong câu trả lời đã chết, đây là liên kết được cập nhật: https://www.railstutorial.org/book/_single-page#sec-friendly_forwarding – Nilloc

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