jendiamond / railsgirls-signup

https://railsgirls-signup.herokuapp.com
3 stars 3 forks source link

A member should be able to retrieve their password #25

Closed jendiamond closed 6 years ago

jendiamond commented 8 years ago

https://www.codeschool.com/blog/2012/10/02/re-generating-forgot-password-emails-with-devise/

Solution:

  1. Build a custom admin feature using the devise recoverable module.
  2. Documentation for this can be found at: http://rubydoc.info/github/plataformatec/devise/master/Devise/Models/Recoverable/ClassMethods ruby (Object) send_reset_password_instructions(attributes = {})
  3. The method attempts to find a user by its email. If a record is found, it sends new password instructions. If no user is found, it returns a new user with an “email not found” error. Attributes must contain the user email.
  4. Recoverable is available to you if it’s included in your User model: ruby class User < ActiveRecord::Base devise :database_authenticatable, :timeoutable, :registerable, :recoverable, :rememberable, :trackable ...

The emails for Rails Girls LA is railsgirlsla@gmail.com


How to:

  1. Create a method in your controller that will call send_reset_password_instructions. In users_controller.rb, add: ruby def generate_new_password_email user = User.find(params[:user_id]) user.send_reset_password_instructions flash[:notice] = "Reset password instructions have been sent to #{user.email}." redirect_to admin_user_path(user) end
  2. Create a route in routes.rb: ruby namespace :admin do resources :users, only: :show do post :generate_new_password_email end end
  3. Create a simple form on your user’s show page in the admin. In show.html.erb, add: ruby <%=form_tag(admin_user_generate_new_password_email_path(@user)) do %> <%=submit_tag 'Send Reset Password Email', class: 'button', :confirm => 'Are you sure you want to email reset password instructions?' %> <% end %>
  4. That’s it! If you want to test this in your development environment, you can configure your SMTP settings to send an email locally. At the bottom of config/environments/development.rb, add: ruby config.action_mailer.default_url_options = { :host => 'localhost:3000' } config.action_mailer.delivery_method = :smtp config.action_mailer.perform_deliveries = true config.action_mailer.raise_delivery_errors = true config.action_mailer.default :charset => "utf-8" ActionMailer::Base.smtp_settings = { :address => "smtp.gmail.com", :port => 587, :authentication => :plain, :domain => 'gmail.com', :user_name => 'username@gmail.com', :password => 'secret' }
  5. Restart your local server.
  6. From your user page in the admin panel, you can now hit the “Send Reset Password Email” button, and a new reset password email will be sent to the user.