我想做的是:设置邀请过程,当用户邀请新用户时,它会创建一个用户(电子邮件和密码),并向该新用户发送欢迎电子邮件,并提供一个链接以重置其密码。
我的用户模型
def set_initial_password_reset!
raw,enc = Devise.token_generator.generate(self.class,:reset_password_token)
self.reset_password_token = enc
self.reset_password_sent_at = Time.now.utc
save(validate: false)
@token_reset = raw
end
我的InviteController包含
@user_invitee = User.new(email: invite_params[:email]) do |u|
u.password = SecureRandom.hex
# raise
end
@user_invitee.skip_confirmation!
@user_invitee.save
@user_invitee.set_initial_password_reset!
create_invite
if @invite.save!
InviteMailer.new_user_invite(@invite,edit_password_path(@resource = User.find_by(id:
@invite.recipient),reset_password_token: @token_reset)).deliver
redirect_to trip_trip_form(@trip)
当我在set_initial_password_reset!
中“提升”到用户模型以分析@token_reset时,我有一个值,但是在InviteController中,该值为nil,我不知道如何获取该值?
我尝试了在stackoverflow上看到的其他方法来实现该过程,例如:
用户模型
def set_initial_password_reset!
self.reset_password_token = Devise.token_generator.generate(self.class,:reset_password_token)
self.reset_password_sent_at = Time.now.utc
save(validate: false)
end
和 InviteController
InviteMailer.new_user_invite(@invite,edit_password_path(@resource = User.find_by(id: @invite.recipient),reset_password_token: @resource.reset_password_token)).deliver
,但生成的令牌无效。我应该有一个这样的令牌:http://localhost:3000/users/password/edit?reset_password_token=i8t77fcdsj3PYRymVdEK 但是我得到了更长的令牌。
有关信息我的邮件收发器控制器
class InviteMailer < Applicationmailer
def new_user_invite(invite,edit_password_path)
@invite = invite # Instance variable => available in view
@new_user_registration_url = edit_password_path
mail(to: @invite.email,subject: 'Welcome to Travlr!')
@trip = Trip.find_by(id: @invite.trip_id)
@sender = User.find_by(id: @invite.sender)
end
感谢您的帮助!