Забытый пароль в Rails

Я пытаюсь реализовать решение для забытого пароля в рельсах. У меня есть форма для пользователя, чтобы ввести адрес электронной почты для своей зарегистрированной учетной записи, и я намереваюсь, чтобы почтовая программа отправила им уникальный URL-адрес, который свяжет их со страницей сброса пароля.

В моем файле config/routes.rb есть следующие маршруты:

resources :users do
  collection do
    get :lost_password   #the account-email submisison form url
    get :reset_password  #a url for the function that sends the response email
  end
end

Когда я запускаю рейк-маршруты из консоли, я получаю нужные мне пути:

lost_password_users  GET  /users/lost_password(.:format)  {:action=>"lost_password", :controller=>"users"}
reset_password_users GET  /users/reset_password(.:format) {:action=>"reset_password", :controller=>"users"}
users                GET  /users(.:format)                {:action=>"index", :controller=>"users"}
                     POST /users(.:format)                {:action=>"create", :controller=>"users"}

НО! Когда пользователь нажимает кнопку отправки в форме, описанной в приведенном ниже коде:

<h3>Reset Password</h3>
<%= form_for(:user, :url => reset_password_users_path) do |f| %>
  <p>Enter the email address you used to register for this site.</p></br>
  <div class="field">
    <%= f.label :email %>  </br>
    <%= f.text_field :email %> 
  </div>
  <div class="actions">
  <%= f.submit "Send Email" %>
  </div> 
<% end %>

я получаю

Нет маршрута, соответствующего "/users/reset_password"

ошибка через ActionController.

На самом деле у меня есть представления и функции контроллера, определенные как для lost_password_users_path, так и для reset_password_users_path, поэтому я озадачен тем, почему я столкнулся с этой ошибкой маршрутизации.

У меня есть два вопроса:

  1. Почему ActionController выдает эту ошибку, когда у меня четко определены путь, методы и представления?
  2. Кто-нибудь еще реализовал сброс пароля в RoR, и можете ли вы дать какое-либо представление о том, является ли этот подход хорошей практикой?

Заранее спасибо!


person ArcGhost    schedule 19.05.2011    source источник


Ответы (2)


Попробуйте изменить get :reset_password на post :reset_password в route.rb

person Pravin    schedule 19.05.2011
comment
Спасибо, Правин! Все еще работаю над тем, чтобы понять, как все это связано друг с другом. =П - person ArcGhost; 19.05.2011

функция сброса пароля: надеюсь, будет работать, используйте в функции обновления контроллера

    if params[:user][:password].present?
    puts "present"
    puts params[:current_password]
    if (params[:user][:password] == "")
      params[:user].delete(:password) 
    else
      if @user.valid_password?(params[:current_password])
        @updated = true
        puts @updated.to_s
        @user.update_attributes(user_params)
        sign_in(@user,:bypass => true) 
        flash[:notice] = "Password Updated Successfully"
        redirect_back fallback_location: user_url
      else
        @updated = false
        puts @updated.to_s
        flash[:danger] = "Current Password does not matched"
        redirect_back fallback_location: user_url

      end
    end
person Harshit Srivastava    schedule 12.06.2019