🦦
【Rails7.0】アカウントの有効化ができない ~Invalid action link~
概要
「sign upをした後、送られてきたメール内のリンクをクリックすることでアカウントを有効化する」という機能を作成しているが、うまく機能を実装できない。
問題
sign upをした後、送られてきたメールのリンクをクリックしてもアカウントの有効化が成功しなかった。
有効化が成功すると、「Account Activated!」と表示されるはずですが、こちらの画像のような表示になってしまい、有効化ができない。
原因
受け取る側の問題ではなく、アクティベーション用に生成されたメール文面で、メールアドレスの指定に間違いとか先頭に空白や記号文字列がついているのかもしれない。
- メールは正しく送信されて、正しい宛先に届く
- メールのリンクをクリックすると、”3D” という文字列がくっついてコントローラにPOSTされてしまう
もしこの状態なら、メールのテンプレートに空白文字や記号が入っちゃっているのかもしれません。
- app/views/user_mailer/account_activation.text.erb
- app/views/user_mailer/account_activation.html.erb
になると思うので、
edit_account_activation_url(@user.activation_token, email: @user.email)
のところで変な文字や改行が入っていないか確認してみるべし。(text用、html用双方)
解決法
ここの9行目の余計な改行をなくす
app/views/user_mailer/account_activation.html.erb
<h1>Sample App</h1>
<p>Hi <%= @user.name %>,</p>
<p>
Welcome to the Sample App! Click on the link below to activate your account:
</p>
<%= link_to "Activate", edit_account_activation_url(@user.activation_token,
email: @user.email) %>
下記に変える
app/views/user_mailer/account_activation.html.erb
<h1>Sample App</h1>
<p>Hi <%= @user.name %>,</p>
<p>
Welcome to the Sample App! Click on the link below to activate your account:
</p>
<%= link_to "Activate", edit_account_activation_url(@user.activation_token, email: @user.email) %>
もしそれでダメなら、editアクションのif構文「app/controllers/account_activations_controller.rb」の1行目を強制的に通るように修正する
app/controllers/account_activations_controller.rb
if user && !user.activated? && user.authenticated?(:activation, params[:id])
#下記に変更
if user.present?
app/controllers/account_activations_controller.rb
class AccountActivationsController < ApplicationController
def edit
user = User.find_by(email: params[:email])
if user.present?
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
参考
まとめ
-
sign upをした後、送られてきたメールのリンクをクリックしてもアカウントの有効化が成功しなかった。
有効化が成功すると、「Account Activated!」と表示されるはずですが、こちらの画像のような表示になってしまい、有効化ができない。 -
原因は、受け取る側の問題ではなく、アクティベーション用に生成されたメール文面で、メールアドレスの指定に間違いとか先頭に空白や記号文字列がついているのかもしれない。
-
もしそれでダメならeditアクションのif構文「app/controllers/account_activations_controller.rb」の1行目を強制的に通るように修正する
Discussion