controller
def create
# admin manually creates user
UserMailer.reset_password_instructions(@user).deliver
end
user.rb
class User < ActiveRecord::Base
before_create :generate_reset_password_token # generating devise reset token
# Include default devise modules. Others available are:
# :confirmable, :lockable and :omniauthable
# :registerable,
# :trackable,
devise :database_authenticatable,
# :confirmable,
:rememberable,
:validatable,
:recoverable,
:trackable,
:timeoutable
private
# Generates a new random token for confirmation, and stores
# the time this token is being generated
def generate_reset_password_token
raw, enc = Devise.token_generator.generate(self.class, :reset_password_token)
@raw_confirmation_token = raw
self.reset_password_token = enc
self.reset_password_sent_at = Time.now.utc
end
end
user_mailer.rb
class UserMailer < ApplicationMailer
include Devise::Mailers::Helpers
default from: 'no-reply@identt.co'
def reset_password_instructions(resource, opts={})
@resource = resource
@token = @resource.reset_password_token
mail(to: @resource.email, subject: "Reset Password Instructions")
end
end
reset_password_instructions.html.erb
<p>Hello <%= @resource.email %>!</p>
<p>Someone has requested a link to change your password. You can do this through the link below.</p>
<p><%= link_to 'Change my password', edit_password_url(@resource, reset_password_token: @token) %></p>
<p>If you didn't request this, please ignore this email.</p>
<p>Your password won't change until you access the link above and create a new one.</p>
At this point, when user is created manually by admin, Password reset
Link is going to the email address, which I can see using MailCatcher
or letter_opener
. http://ift.tt/1MG0D7C
I click on the link and it successfully took me to edit password page. When I submit form, ivalidation failed with Reset password token is invalid
message.
What am I missing here....
Aucun commentaire:
Enregistrer un commentaire