Ich benutze Clearance und liebe es, aber ich habe Probleme beim Zurücksetzen von Passwörtern. Ich gebe meine E-Mail ein, um das Passwort zurückzusetzen, was funktioniert, aber wenn ich dann mit dem Reset-Token zur Seite zum Bearbeiten des Passworts navigiere, erhalte ich den Fehler, wenn der Flash-Fehler verboten ist. "Bitte überprüfen Sie die URL noch einmal "Und es leitet mich zurück. Ich bekomme den gleichen Fehler in meinen Tests.Räumungsfehler, wenn verboten Passwort zurückgesetzt
Ich denke, das hat etwas mit meinen before_action Aussagen zu tun, aber ich weiß einfach nicht, wie man sie behebt. Ich habe Fragen wie this vergeblich recherchiert.
Ich bin mir sicher, es ist eine dumme Frage, aber ich bin neu, also schätze ich jede Hilfe. Bitte lassen Sie mich wissen, wenn das nicht genug Code ist.
class UsersController < Clearance::UsersController
before_action :require_login, only: [:create] # does this need to be in both user controllers?
...
def user_params
params.require(:user)
end
end
Und hier ist der Clearance Controller.
class Clearance::UsersController < ApplicationController
before_action :require_login, only: [:create]
require 'will_paginate/array'
def new
@user = user_from_params
render template: 'users/new'
end
def create
@user = user_from_params
@user.regenerate_password
if @user.save
sign_in @user unless current_user
UserMailer.welcome_email(@user).deliver!
redirect_to users_path
else
render template: 'users/new'
end
end
def edit
@user = User.friendly.find(params[:id])
end
def update
@user = User.friendly.find(params[:id])
if @user.update(permit_params)
redirect_to @user
flash[:success] = "This profile has been updated."
else
render 'edit'
end
end
private
def avoid_sign_in
redirect_to Clearance.configuration.redirect_url
end
def url_after_create(user)
dashboards_path(user)
end
def user_from_params
user_params = params[:user] || Hash.new
is_public = check_public_params(user_params)
first_name = user_params.delete(:first_name)
last_name = user_params.delete(:last_name)
email = user_params.delete(:email)
password = user_params.delete(:password)
parish = user_params.delete(:parish)
division = user_params.delete(:division)
admin = user_params.delete(:admin)
Clearance.configuration.user_model.new(user_params).tap do |user|
user.first_name = first_name
user.last_name = last_name
user.password = password
user.email = email
user.is_public = is_public
user.parish_id = parish.to_i
user.division = division
user.admin = admin
end
end
def permit_params
params.require(:user).permit(:first_name, :last_name, :email, :password, :is_public, :parish_id, :division, :admin)
end
end
EDIT: relevante Teile routes.rb
Rails.application.routes.draw do
resources :passwords, controller: "clearance/passwords", only: [:create, :new]
resource :session, controller: "clearance/sessions", only: [:create]
resources :users, controller: "clearance/users", only: [:create] do
resource :password,
controller: "clearance/passwords",
only: [:create, :edit, :update]
end
get "/sign_in" => "clearance/sessions#new", as: "sign_in"
delete "/sign_out" => "clearance/sessions#destroy", as: "sign_out"
get "/sign_up" => "clearance/users#new", as: "sign_up"
constraints Clearance::Constraints::SignedOut.new do
root to: 'high_voltage/pages#show', id: 'landing'
end
constraints Clearance::Constraints::SignedIn.new do
# root to: 'dashboards#index', as: :signed_in_root
root to: 'high_voltage/pages#show', id: 'parish_dashboard', as: :signed_in_root
end
# constraints Clearance::Constraints::SignedIn.new { |user| user.admin? } do
# root to: 'teams#index', as: :admin_root
# end
resources :users do
collection { post :import }
end
Sofern Sie nichts getan haben, um es zu überschreiben, geht der Link zum Zurücksetzen Ihres Passworts nicht zum 'UsersController', sondern zum' PasswordsController # edit' (und eventuell 'PasswordsController # update'). Wie sehen deine Routen aus? Haben Sie den Kennwortregler überschrieben? –
Danke für die Antwort Derek. Ich habe 'rails generieren clearance: routes' ausgeführt, aber ich habe noch keine Änderungen vorgenommen. – rubygirl
Richten Sie einfach eine Test-App ein, und das Zurücksetzen des Passworts ist dort in Ordnung, aber ich kann es immer noch nicht zum Laufen bringen. – rubygirl