Забравена парола в Rails

Опитвам се да внедря решение за забравена парола в 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 %>

получавам a

Няма маршрут, който да съответства на „/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 в routes.rb

person Pravin    schedule 19.05.2011
comment
Благодаря, Правин! Все още работим през нарастващите болки от разбирането как всичко е свързано заедно. =P - 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