0

I was wondering if there was any account recovery gem for a ruby on rails password allowing the app to send the user to his sms a pin to reset their password in the event the user forgets it? Googled but didn't see anything, figured I would ask here in case my google search string was just poorly written.

ruby on rails account recovery via sms

4

2 回答 2

2

我不知道有什么宝石,但这听起来并不难实现。正如 vgoff 所提到的,有很多 SMS 服务可供您使用。

类似于(尚未对此进行测试):

class SMSReset < ActiveRecord::Base
  TOKEN_LENGTH = 4
  EXPIRY_TIME = 15.minutes

  belongs_to :user

  before_create :generate_token, :set_expiry

  def dispatch_sms!
    MySMSProvider.send_sms(to: user.mobile_number, body: "Your SMS token is: #{token}")
  end

  def has_not_expired?
    expires_at > Time.now
  end

  private

  def generate_token
    self[:token] = SecureRandom.hex[0..TOKEN_LENGTH - 1].downcase
  end

  def set_expiry
    self[:expires_at] = EXPIRY_TIME.from_now
  end
end


class PasswordResetController < ApplicationController
  def new
  end

  def create
    @user = User.where(email: params[:email]).first

    if @user
      sms_reset = @user.create_sms_reset!
      sms_reset.dispatch_sms!
      flash.now[:success] = "Please enter the code that was sent to your phone in the field below"
    else
      flash.now[:error] = "No user was found by that email address"
      render :new
    end
  end

  def validate_token
    sms_reset = SMSReset.where(user_id: params[:user_id], token: params[:token])

    if sms_reset.present? && sms_reset.has_not_expired?
      @user = sms_reset.user
      render :password_reset_form
    else
      flash.now[:error] = "Sorry, that code wasn't recognized"
      render :new
    end
  end
end

你会想要处理错误,并且还有改进的空间,但希望这个要点是有意义的。

于 2013-08-27T22:54:02.323 回答
0

不是我直接知道的,但是https://www.ruby-toolbox.com/search?utf8=%E2%9C%93&q=sms为 SMS 交互提供了一些宝石。

这是我最先看的地方之一,也是直接在 github.com 上搜索的地方之一。RubyForge 是寻找宝石的另一个很好的信息来源。

https://rubyforge.org/search/?type_of_search=soft&words=sms&Search=Search

于 2013-08-27T22:26:36.850 回答