2016-08-13 24 views
-1

Ich versuche, eine separate Ansicht für das Ändern von Benutzerkennwort zu erstellen, ich nicht wie das zu tun.Wenn ich beginne, merke ich, dass es andere Methoden und möglicherweise einige Validierungen im Modell. Ich brauche Hilfe, wie kann ich das tun. Ich habe keine Ahnung. Was ich in Controller, Modell und Ansicht aufnehmen muss. Ich implementiere auch "Altes Passwort eingeben, um neues Passwort zu erstellen".Ruby on Rails Authentifizierung

+0

Verwenden Sie Devise? Oder hast du dein eigenes Authentifizierungssystem gerollt? –

+0

hatte ich durch eigenes Authentifizierungssystem implementiert. –

Antwort

0

Ich würde Ihnen empfehlen, die RESTful Prinzipien zu folgen.

Erstellen Sie eine PasswordsController in Ihrem Projekt mit den Aktionen edit und update.

Dann erstellen Sie die edit.html.erb Ansicht mit dem Formular für die Passwortänderung.

Die Validierungen in Ihrem Modell hängen von Ihren Anforderungen ab. Hier

ist ein Beispiel dafür oben:

Controller:

class PasswordsController < ApplicationController 
    before_action :set_user 
    before_action :check_current_password, only: :update 

    def edit 
    end 

    def update 
    if @user.update password_params 
     flash[:success] = 'Password changed' 
     redirect_to user_path # Your user's profile for example 
    else 
     flash[:danger] = 'Error' 
     render :edit 
    end 
    end 

    private 

    def password_params 
    params.require(:user).permit(:password, :password_confirmation) 
    end 

    def set_user 
    @user = current_user # Your current user 
    end 

    def check_current_password 
    unless @user.authenticate(params[:current_password]) 
     raise # I would recommend you to work with exceptions here because you interrupt the process. 
      # You can make it also a bit more specific if you define an exception class and just catch them. 
    end 
    rescue 
    flash[:danger] = 'Current password incorrect!' 
    redirect_to password_path(current_user) # Redirect back to the change page 
    end 
end 

Ausblick:

<!-- HTML skeleton is in application.html.erb --> 

<%= form_for @user, url: password_path, method: :patch do |f| %> 
    <%= text_field_tag :current_password %> 

    <%= f.text_field :password %> 
    <%= f.text_field :password_confirmation %> 

    <%= f.submit 'Change password' %> 
<% end %> 

Vorausgesetzt, dass Sie installiert haben bcrypt Edelstein- und Ihr Benutzermodell hat eine Feld namens password_digest, sollte Ihr Modell dies mögen .

Modell:

class User < ApplicationRecord 
    has_secure_password 
end 

Dies ist eine sehr einfache Implementierung einer Kennwortänderung. Ich habe es nicht getestet, aber es ist nur hier, um Ihnen eine Idee zu geben, wie es funktioniert.

Weitere Informationen finden Sie unter https://gist.github.com/thebucknerlife/10090014#steps

+0

Vielen Dank. Das Problem ist jedoch, dass der Benutzer das aktuelle Passwort eingeben muss, um ein neues Passwort zu erstellen. –

+0

Fügen Sie dann ein weiteres Feld hinzu, das das aktuelle Passwort benötigt, und prüfen Sie es in Ihrem Controller, bevor Sie es aktualisieren. Ich werde meine Antwort aktualisieren. – Tobias