Có cách nào trong Devise 1.0, thư viện dành cho Rails 2.3 không, để chuyển hướng đến URL cụ thể chứ không phải root_url sau khi đăng nhập?Chuyển hướng đến URL cụ thể sau khi đăng nhập
EDIT: quên đề cập đến nó lập mưu 1.0
Có cách nào trong Devise 1.0, thư viện dành cho Rails 2.3 không, để chuyển hướng đến URL cụ thể chứ không phải root_url sau khi đăng nhập?Chuyển hướng đến URL cụ thể sau khi đăng nhập
EDIT: quên đề cập đến nó lập mưu 1.0
Tôi nghĩ rằng after_sign_in_path_for
phương pháp trong lập mưu là những gì bạn đang tìm kiếm.
Xác định phương thức đó trong ApplicationController của bạn và nó sẽ vượt quá khả năng triển khai mặc định của Devise. Đây là những gì tài liệu chỉ định để làm.
chi tiết ở đây: http://rdoc.info/github/plataformatec/devise/master/Devise/Controllers/Helpers:after_sign_in_path_for
Rất có thể rằng người dùng của bạn đã được chuyển hướng trước khi after_sign_in_path
được gọi. Điều này xảy ra nếu người dùng cố gắng truy cập trang được bảo vệ bằng xác thực trực tiếp. Điều này sẽ xảy ra mọi lúc nếu bạn có root_path
('/') được bảo vệ bằng xác thực.
Có một cuộc thảo luận về nhóm google về chủ đề này:
Các giải pháp nhanh chóng và dơ bẩn là ghi đè lên stored_location_for
để luôn trở nil
như vậy:
class ApplicationController < ActionController::Base
...
private
def stored_location_for(resource_or_scope)
nil
end
def after_sign_in_path_for(resource_or_scope)
my_favorite_path
end
end
Là một biến thể nhỏ về điều này, tôi chỉ trả về nil từ archive_location_for nếu nó khớp với '/' là tuyến mặc định của tôi. Bằng cách đó, họ sẽ chỉ truy cập after_sign_in_path nếu họ không cố gắng đi đến một nơi khác. Để làm điều đó, chỉ cần thay thế nil bằng "(location = super) == '/'? Nil: location". –
Giả sử bạn muốn hiển thị trang tổng quan của người dùng sau khi đăng nhập.
class HomesController < ApplicationController
def index
if current_user //returns nil if not logged in
@users = User.all
render :dashboard
end
end
def dashboard
@users = User.all
end
end
trong routes.rb:
root :to => 'homes#index'
Nếu đã đăng nhập, nếu khối được nhập vào action index và dashboard.erb được trả lại. (đảm bảo khởi tạo tất cả các biến, được yêu cầu bởi dashboard.erb, trong if-block của bạn) Nếu không, đường ray sẽ hiển thị index.erb
Tôi quên đề cập đến trong Devise 1.0, chứ không phải 1.1. – Pablo
after_sign_in_path_for hiện không được gọi trên 1.0.8. – Pablo
Nhìn vào SessionsController của Devise, khi đăng nhập thành công, sign_in_and_redirect được gọi. Điều này chuyển hướng đến vị trí trước đó được lưu trữ trong phiên. Nếu không có vị trí được lưu trữ, sau đó after_sign_in_path_for được gọi. Người dùng có đăng nhập từ (hoặc qua) trang chủ không? Điều đó có thể giải thích tại sao nó luôn chuyển hướng trở lại đó. – Sidane