2011-07-22 32 views
6

Rails 2.3.11Redirect đến đích ban đầu sau khi đăng nhập

Nếu người dùng cố gắng đi đến/ảnh khi họ chưa đăng nhập, họ đang hướng đến [site]/admin/login?route=[site]/photos. Sau khi họ đăng nhập, tôi muốn họ được gửi đến bất cứ điều gì đã được xác định trong "tuyến đường" thay vì trang chủ mặc định.

Trong /app/controllers/admin_controller.rb:

def login 
    if session[:user_id] #already logged in 
     redirect_to '' 
    @destination = request.url 
    end 
    if request.post? 
     if [authentication code] 
     if user.activated? #check to see whether the user has activated their account 
      session[:user_id] = user.id 
      if params[:route] # ******** 
      redirect_to "#{params[:route]}" 
      else 
      redirect_to :controller => 'home' 
      end 
     else 
      flash.now[:notice] = "Your account hasn't been activated yet. Check your emails!" 
     end 
     else 
     flash.now[:notice] = "Invalid email/password combination" 
     end 
    end 
    end 

Các "*" dòng ed là một trong đó không hoạt động đúng. Khi tôi kiểm tra để xem các thông số,: tuyến đường không nằm trong số đó, vì vậy đối số không được chuyển vào với bài đăng nhập. Bất cứ ai có thể giải thích cho tôi tại sao nó không phải là và làm thế nào tôi có thể sửa chữa nó?

Cảm ơn bạn!

Trả lời

3

Bạn có thể làm một cái gì đó như:

session[:return_to] ||= request.referer 
+1

Có một cái nhìn tại http://stackoverflow.com/questions/2139996/ruby-on-rails-redirect-toback – Swift

+0

này có vẻ như nó nên làm các trick , nhưng tôi vẫn còn khá mới ở Rails, vì vậy bạn có thể vui lòng xây dựng một chút về nơi tôi nên đặt đó? Nó sẽ đi trong bộ điều khiển ứng dụng của tôi (nơi nó chuyển hướng các khách truy cập không đăng nhập vào trang đăng nhập) hoặc ở đâu đó trong phương thức được đăng ở trên? Cảm ơn! – Benjin

+1

Cảm ơn bạn; đã hoạt động (một khi tôi đã tìm ra)! Đối với tất cả những người khác, những gì tôi đã phải làm là: Có một before_filter hướng đến một phương thức ủy quyền: 'def ủy quyền trừ khi logged_in? phiên [: original_target] = request.request_uri đèn flash [: Thông báo] = "Bạn phải đăng nhập để xem trang đó" redirect_to HOME_URL cuối end' Sau đó, trong điều khiển đăng nhập của tôi, sau khi chứng thực người dùng, kiểm tra xem có bất kỳ thứ gì được lưu trữ trong phiên [: original_target] hay không, và nếu có, hãy chuyển đến điều đó. – Benjin

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