Ich werde die Funktion kurz erläutern, bevor ich mit der Erläuterung des Problems beginne. Wenn sich ein Benutzer anmeldet, erhält er ein Aktivierungs-Token in seiner E-Mail, das in 2 Stunden abläuft. Ich habe versucht, eine Funktion zu implementieren, mit der Benutzer das Aktivierungstoken in ihrer E-Mail erneut senden können.Ein Problem mit der URL beim Implementieren einer Funktion zum erneuten Senden von Token
Der Code für die Funktion zum erneuten Senden der Aktivierungstoken ist unten angegeben.
Controller-Code in Benutzer-Controller
def resend_verification_email
@user = User.find_by(email: params[:resend_verification_email] [:email].downcase)
if valid_email(params[:resend_verification_email] [:email])
if [email protected]
redirect_to resend_verification_path
flash[:danger] = "Email does not exist"
elsif
[email protected]?
UserMailer.resend_activation(@user).deliver_now
flash[:success] = "Check your email for the activation token"
redirect_to resend_verification_path
else
redirect_to resend_verification_path
flash[:success] = "User is already activated."
end
else
flash[:danger] = "Email format is Invalid"
redirect_to resend_verification_path
end
end
Konto Aktivierungen Controller
class AccountActivationsController < ApplicationController
def edit
user = User.find_by(email: params[:email])
if user && !user.activated? && user.authenticated?(:activation, params[:id]) #the token is actually available by params id
user.activate
log_in user
flash[:success] = "Account activated."
redirect_to home_path
else
flash[:danger] = "Invalid activation link"
redirect_to root_url
end
end
end
Der Mailer Controller-Methode
def resend_activation(user)
@user = user
@userid = user.id
mail to: user.email, subject: "Account activation"
end
Der Mailer Ansicht
<%= link_to "Activate your account", edit_account_activation_url(id: @user.activation_token, email: @user.email) %>
Ich bekomme den folgenden Fehler. No route matches {:action=>"edit", :controller=>"account_activations", :email=>"[email protected]", :id=>nil} missing required keys: [:id]
.
Ich verstehe, was der Fehler sagt. Das erste Argument der URL ist das Token, und die Art und Weise zu greifen ist über params [: id], denn in REST-routen ist ID immer das erste Argument. Die E-Mail wird gut gesendet, wenn ich die URL los werde. Die URL wirft diesen Fehler auf und ich bin nicht wirklich sicher warum. Jede Hilfe wäre willkommen. Vielen Dank!
Ich habe nur die relevanten Routen aufgenommen.
get 'resend_verification' => 'users#resend_verification'
post 'resend_verification_email' => 'users#resend_verification_email'
resources :account_activations, only: [:edit]
resources :password_resets, only: [:new, :create, :edit, :update]
Relevante Rake Routen
edit_account_activation GET /account_activations/:id/edit(.:format) account_activations#edit
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
resend_verification GET /resend_verification(.:format) users#resend_verification
resend_verification_email POST /resend_verification_email(.:format) users#resend_verification_email
Ich habe eine Lösung. Bevor Sie das teilen, posten Sie bitte die Ausgabe von 'Rake Routes'. Ich muss mich vergewissern, ob ich recht habe. –
@ArunKumar, ich habe die Rake-Routen in der ursprünglichen Frage ignoriert. –
Bitte senden Sie die Ausgabe von 'Rake Routen'. Nicht die Routen, die Sie in routes.rb –