2017-07-05 3 views
0

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 
+0

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? –

+0

Danke für die Antwort Derek. Ich habe 'rails generieren clearance: routes' ausgeführt, aber ich habe noch keine Änderungen vorgenommen. – rubygirl

+0

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

Antwort

0

Es stellt sich heraus es ein Konflikt zwischen der Art und Weise war ich in dem Passwort-Reset-Link, um die Benutzerinstanz wurde zu finden. Clearance findet Benutzer einfach unter Verwendung von @user, aber da ich FriendlyId verwende, musste ich das zu @user.id ändern.

Also statt ...

<%= link_to 'Change My Password', edit_user_password_url(@user, token: @user.confirmation_token.html_safe) %> 

Ich habe

<%= link_to 'Change My Password', edit_user_password_url(@user.id, token: @user.confirmation_token.html_safe) %> 

Danke, Thoughbot, für diese große Juwel!

Verwandte Themen