Подтверждение регистрации по электронной почте с помощью ActionMailer

В настоящее время у меня ActionMailer отправляет электронное письмо, когда пользователь регистрируется, и я генерирую случайный :sign_in_token с пользователем.

Как пользователь может щелкнуть ссылку, отправленную на его электронную почту, и обновить логическое значение users :registration_complete на TRUE?

В настоящее время я могу отправить ссылку и создать случайный токен, но я не знаю, как обновить логическое значение по электронной почте.

МОДЕЛИ

class User < ActiveRecord::Base
  attr_accessible :name, :email, :password, :password_confirmation, :sign_in_token, 
              :registration_complete

  ###This generates my sign_in_token
  def generate_sign_in_token
    self.sign_in_token = Digest::SHA1.hexdigest([Time.now, rand].join)
  end

end

КОНТРОЛЛЕР

def create
  @user = RegularUser.new(params[:regular_user])
  if @user.save      

    ###Sends the User an email with sign_in_token
    UserMailer.registration_confirmation(@user, login_url+"/#{@user.sign_in_token}").deliver

    flash[:success] = "Please Check Your Email to Verify your Registration!"
    redirect_to (verifyemail_path)
  else
    render 'new'
  end
end

USER_MAILER

def registration_confirmation(user, login_url)
  @login_url = login_url
  @user = user
  mail(:to => "#{user.name} <#{user.email}>", :subject => "Welcome to APP")
end

ВЗГЛЯДЫ

###Redirects User to Login Page, But how do i connect it to my activate method?
<%= link_to "Complete Registration", @login_url %>

МАРШРУТЫ

match '/login/:sign_in_token', :to => 'sessions#new'

person Serge Pedroza    schedule 02.02.2014    source источник


Ответы (1)


Когда они нажимают на ссылку, они переходят к контроллеру с действием set_complete, используя запрос GET, который устанавливает логическое значение.

Что-то вроде:

def set_complete
user = User.find(params[:user])
user.update_attribute(registration_complete => true)
redirect_to login_path # or whatever your login url is...

end

Для действия контроллера и что-то вроде этого для ссылки:

<a href="example.com/registrations/set_complete?user=1" />

Вот пример того, что может быть в файле маршрутов:

get "/users/set_complete", :to => "users#set_complete"

Вам, вероятно, потребуется установить идентификатор пользователя на то, что вы хотите, используя erb, и сделать несколько других настроек для конкретного приложения, но это общая идея.

Надеюсь это поможет!

person Amar H-V    schedule 02.02.2014
comment
Если бы это ответило на ваш вопрос, не могли бы вы принять это как ответ? - person Amar H-V; 02.02.2014
comment
и как будут выглядеть маршруты? - person Serge Pedroza; 03.02.2014
comment
Обновленный ответ выше с маршрутами - person Amar H-V; 03.02.2014