2011-12-16 35 views
6

Tôi đang cố gắng cho phép người dùng đặt lại mật khẩu của mình bằng cách sử dụng tùy chọn phục hồi của Devise. Điều này dường như không làm việc cho tôi.Devise - Recoverable (Đặt lại mật khẩu)

Tôi mở rộng Devise::PasswordsController để không sử dụng bố cục ứng dụng.

class PasswordsController < Devise::PasswordsController 
    layout false 
end 

Trong các tuyến đường, tôi đảm bảo rằng bộ điều khiển mật khẩu của tôi được sử dụng.

devise_for :users, :controllers => {:passwords => "passwords"} 
resources :passwords 

Đây là mẫu người dùng của tôi để bạn thấy rằng tôi có tùy chọn :recoverable.

devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 

Trên trang đăng nhập của tôi, tôi đã (Tôi đang sử dụng Haml):

... 
= link_to "Forgot your password?", new_password_path(resource_name) 

Liên kết này một cách chính xác đưa tôi đến http://localhost:3000/users/password/new .Here là hình thức được tìm thấy ở đó:

%h2 Forgot your password? 
= form_for(resource, as: resource_name, url: password_path(resource_name), html: { :method => :post }) do |f| 
    = devise_error_messages! 
    %div 
    = f.label :email 
    %br/ 
    = f.email_field :email 
    %div= f.submit "Send me reset password instructions" 

Tuy nhiên, điều này dường như cố gắng đưa tôi đến địa điểm sai khi tôi nhấp vào nút. Nó không thành công mỗi lần và không hiển thị bất kỳ email nào trong nhật ký máy chủ.

Nó chuyển hướng tôi đến: http://localhost:3000/passwords/user và nói với tôi:

Routing Lỗi

No route matches "/passwords/user" 

Bất kỳ ý tưởng làm thế nào tôi có thể tiến hành? Tôi nghĩ sử dụng tùy chọn có thể khôi phục được có nghĩa là dễ hơn thế này. Tôi đang làm gì sai?

CẬP NHẬT Để ghi lại, tôi đã xóa mọi thứ tôi đã làm và thử sử dụng bộ điều khiển tiêu chuẩn, và tôi sửa đổi bố cục ứng dụng để không gây ra lỗi và mọi thứ đang hoạt động. Vì vậy, tôi chỉ cần một cách hay để xóa bố cục ứng dụng khỏi trang đặt lại mật khẩu.

Trả lời

2

Dường như khi bạn gọi password_path(resource_name) trong mã chế độ xem của mình, hệ thống định tuyến cho rằng bạn có nghĩa là /passwords/resource_name, thay vì tên bộ điều khiển được đặt dưới users bởi Devise. Điều này là do bạn có dòng

resources :passwords 

trực tiếp trong số devise_for gọi trong tệp tuyến đường của bạn. Bây giờ tôi không chắc chắn nếu dòng đó là có cho một lý do, nhưng vấn đề của bạn biến mất khi bạn nhận xét nó ra?

+0

Vấn đề vẫn còn. Nó sẽ không cho phép tôi truy cập vào trang đặt lại mật khẩu mà không có nó. Nó sẽ phàn nàn rằng không có một lộ trình cho người dùng/mật khẩu/mới. Ban đầu tôi cũng nghĩ như vậy, tôi đã tìm thấy thông tin ở đây: https: // github.com/plataformatec/devise/wiki/Cách thực hiện: -Cho phép người dùng-để-chỉnh sửa-mật khẩu của họ – ardavis

+0

Tôi nghĩ rằng vấn đề chính là thực tế là tôi đang cố gắng mở rộng Devise :: PasswordsController. Tôi ước tôi không phải làm điều này, điều duy nhất tôi muốn là dành cho trang đặt lại mật khẩu để không sử dụng bố cục ứng dụng của tôi. – ardavis

+0

Để ghi lại, tôi đã xóa mọi thứ tôi đã làm và thử sử dụng bộ điều khiển tiêu chuẩn, và tôi đã sửa đổi bố cục ứng dụng của mình để nó không gây ra lỗi và mọi thứ đang hoạt động. Vì vậy, tôi chỉ cần một cách hay để xóa bố cục ứng dụng khỏi trang đặt lại mật khẩu. – ardavis

0

Vì lợi ích của bất kỳ ai tìm thấy chuỗi cũ này và muốn một số trang có bố cục khác, tôi sử dụng phương pháp này trong ứng dụng/lượt xem/bố cục/application.html.erb của mình để loại bỏ bố cục mặc định.

<% if (current_page?(what_ever_path)) %> 
    <div class="container"> 
     <%= yield %> 
    </div>  

<% else %> 
    <%= render 'layouts/header' %> 
    <div class="container"> 
     <%= yield %> 
    </div> 
    <%= render 'layouts/footer' %> 
<% end %> 
+0

Tôi biết đây là/là một nhận xét cũ, nhưng bạn có thể dễ dàng ghi đè bố cục của nhà phát triển bằng cách tạo tệp ứng dụng '/ view/layouts/devise.html.erb' của riêng bạn. – Dan

+0

Cảm ơn nhận xét đó và cập nhật thông tin này. Tôi không biết chút rails-magic tại thời điểm đăng bài của tôi. – JosephK

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