0
@user
이 전자 메일 속성을 업데이트 할 때 첫 번째 확인 전자 메일이 전송되고 항상 작동중인 활성화 링크로 끝납니다. 사용자가 이메일을 확인하고 링크를 클릭하면 계정이 확인됩니다. 그러나 두 번째 유효성 확인 전자 메일이 작동하지 않는 이유는 무엇입니까?
def update
@user = User.find(params[:id])
...
elsif !params[:user][:email].blank?
if @user.authenticate(params[:user][:current_password])
@user.update_attributes(email_user_params)
if @user.save
@user.create_activation_digest
@user.deactivated
@user.send_activation_email
log_out
flash[:info] = "Please check email dude"
redirect_to root_url
else
...
때
@user
요청 번째 검증 이메일 :
class EmailResetsController < ApplicationController
def new
end
def create
@user = User.find_by(email: params[:email_reset][:email].downcase)
if @user && [email protected]?
@user.send_activation_email
flash[:info] = "Email sent with instructions"
redirect_to root_url
else
flash.now[:danger] = "Email address not found"
render 'new'
end
end
end
이메일은 그러나 링크는 항상 잘못된 반환이 제대로 발송됩니다.
user.rb
#sends out email
def send_activation_email
UserMailer.account_activation(self).deliver_now
end
def create_activation_digest
self.activation_token = User.new_token
self.activation_digest = User.digest(activation_token)
end
def User.digest(string)
cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
BCrypt::Engine.cost
BCrypt::Password.create(string, cost: cost)
end
# Returns a random token.
def User.new_token
SecureRandom.urlsafe_base64
end
def authenticated?(attribute, token)
digest = send("#{attribute}_digest")
return false if digest.nil?
BCrypt::Password.new(digest).is_password?(token)
end
#the mailer view
account_activation.html.erb
<%= link_to "Activate", edit_account_activation_url(@user.activation_token,
email: @user.email) %>
class UserMailer < ApplicationMailer
default from: "[email protected]"
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
end
end
class AccountActivationsController < ApplicationController
def edit
user = User.find_by(email: params[:email])
if user && !user.activated? && user.authenticated?(:activation, params[:id])
user.activate
log_in user
flash[:success] = "Account activated!"
redirect_to user
else
flash[:danger] = "Invalid activation link"
redirect_to root_url
end
end
end
:activation_token and :activation_digest are both columns in user.rb