J'ai installé laravel frais et copié toutes les vues de connexion, d'enregistrement et de mot de passe et contorller pour la connexion d'administrateur et créé une table appelée 'admins'. Quand j'ai essayé de réinitialiser le mot de passe pour l'utilisateur par défaut de laravel, cela fonctionne mais pour l'utilisateur `` admins '', il ne met pas à jour le mot de passe. Et la table de réinitialisation de mot de passe est également vide lorsque le mot de passe utilisateur par défaut est réinitialisé.
// providers in config/auth.php 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Dashboard\Admin::class, ], ], // passwords reset in config/auth.php 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admins', 'table' => 'admin_password_resets', 'expire' => 60, ], ], //Also added broker and guard in ResetPasswordController.php public function broker() { return Password::broker('admins'); } protected function guard() { return Auth::guard('admin'); }
Tout ce que je veux, c'est mettre à jour le mot de passe administrateur et remplir la table users_reset_table lorsque le mot de passe est réinitialisé. Comment puis-je y parvenir ??
4 Réponses :
Avez-vous ajouté le tableau dans votre modèle App \ Dashboard \ Admin?
protected $table = 'admins';
désolé, mais j'ai essayé mais n'a pas fonctionné .. d'autres idées?
Autant que je sache, vous devez écraser certaines méthodes dans Auth\ResetPasswordController.php
À la vue du fichier, j'ai le sentiment que ces deux méthodes devraient être écrasées.
protected function guard() { return Auth::guard('owner'); } public function broker() { return Password::broker('admin'); }
Étape 1: Mettez à jour auth.php // Fournisseurs dans config / auth.php
<input type="hidden" name="user_type" value="{{ $user_type }}" required>
Setp 2: Ajoutez deux fonctions dans ForgotPasswordController.php
<button class="btn btn-primary btn-sm" onclick="event.preventDefault(); document.getElementById('change-password-form').submit();"> <span class="fa-passwd-reset"> <i class="fa fa-lock"></i> </span> </i> Change Password </button> <form id="change-password-form" method="POST" action="{{ route('password.email', ['user_type' => 'admin']) }}"> @csrf <input type="hidden" name="email" value="{{ $admin->email }}">
Setp 3: Ajoutez deux fonctions dans ResetPasswordController.php
/** * Get the broker to be used during password reset. * * @return PasswordBroker */ protected function broker() { return Password::broker('admins'); } /** * Display the password reset view for the given token. * * If no token is present, display the link request form. * * @param \Illuminate\Http\Request $request * @param string|null $token * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View */ public function showResetForm(Request $request, $token = null) { return view('auth.passwords.reset')->with( ['token' => $token, 'email' => $request->email, 'user_type' => $request->user_type] ); }
Setp 4: // Envoi de type utilisateur sur un modèle de lame //admin-show.blade.php d'où je veux réinitialiser le mot de passe.
/** * Get the broker to be used during password reset. * * @return PasswordBroker */ protected function broker() { return Password::broker('admins'); } /** * Display the form to request a password reset link. * * @return \Illuminate\View\View */ public function showLinkRequestForm() { return view('auth.passwords.email')->with('user_type', request()->user_type); }
Setp 5: // Maintenant, ouvrez email.blade. php et reset.blade.php dans views / auth / passwords / et ajoutez un champ de saisie caché comme celui-ci
'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ] ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\models\Admin::class, ] ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], 'admins' => [ 'provider' => 'admins', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], ],
Réinitialisation des mots de passe pour la table des administrateurs en particulier
Laravel inclut les classes Auth \ ForgotPasswordController
et Auth \ ResetPasswordController
qui contiennent la logique nécessaire pour e -mail mot de passe réinitialiser les liens et réinitialiser les mots de passe utilisateur Toutes les routes nécessaires pour effectuer des réinitialisations de mot de passe peuvent être générées à l'aide du package laravel / ui
Composer:
exécutez les commandes ci-dessous:
php artisan make: notification ResetPasswordNotification
composer require laravel / ui
php artisan ui vue --auth
et
copiez le dossier auth
à partir de resources \ views
et nommé admin
Étape 1: personnalisez le fichier config / auth.php
namespace App\Notifications; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Messages\MailMessage; use Illuminate\Notifications\Notification; use Illuminate\Support\Facades\Lang; class ResetPasswordNotification extends Notification { use Queueable; public $token; /** * Create a new notification instance. * * @return void */ public function __construct($token) { $this->token = $token; } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array */ public function via($notifiable) { return ['mail']; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return \Illuminate\Notifications\Messages\MailMessage */ public function toMail($notifiable) { return (new MailMessage) ->subject(Lang::get('Reset Password Notification')) ->line(Lang::get('You are receiving this email because we received a password reset request for your account.')) ->action(Lang::get('Reset Password'), url(config('app.url').route('admin.password.reset', ['token' => $this->token, 'email' => $notifiable->getEmailForPasswordReset()], false))) ->line(Lang::get('This password reset link will expire in :count minutes.', ['count' => config('auth.passwords.'.config('auth.defaults.passwords').'.expire')])) ->line(Lang::get('If you did not request a password reset, no further action is required.')); } /** * Get the array representation of the notification. * * @param mixed $notifiable * @return array */ public function toArray($notifiable) { return [ // ]; } }
Setp 2: ForgotPasswordController.php dans Dossier App \ Http \ Controllers \ Admin
<form method="POST" action="{{ route('admin.login') }}">
Et
ResetPasswordController.php dans le dossier App \ Http \ Controllers \ Admin
<form method="POST" action="{{ route('admin.password.update') }}">
Setp 3: Modèle Admin.php dans Dossier de l'application
Réinitialiser la personnalisation des e-mails
Vous pouvez facilement modifier la classe de notification utilisée pour envoyer le lien de réinitialisation du mot de passe à l'utilisateur. Pour commencer, remplacez la méthode sendPasswordResetNotification
sur votre modèle utilisateur. Dans cette méthode, vous pouvez envoyer la notification en utilisant n'importe quelle classe de notification de votre choix. La réinitialisation du mot de passe $ token
est le premier argument reçu par la méthode:
<form method="POST" action="{{ route('admin.password.email') }}">
Setp 4: web.php route fichier dans le dossier routs
Route::get('admin-login','Admin\LoginController@showLoginForm')->name('admin.login'); Route::post('admin-password/email','Admin\ForgotPasswordController@sendResetLinkEmail')->name('admin.password.email'); Route::get('admin-password/reset','Admin\ForgotPasswordController@showLinkRequestForm')->name('admin.password.request'); Route::post('admin-password/reset','Admin\ResetPasswordController@reset')->name('admin.password.update'); Route::get('admin-password/reset/{token}','Admin\ResetPasswordController@showResetForm')->name('admin.password.reset');
Setp 5: fichier email.blade.php dans resources \ views \ admin \ passwords
Dossier
<?php namespace App; use App\Notifications\ResetPasswordNotification; use Illuminate\Contracts\Auth\MustVerifyEmail; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; class Admin extends Authenticatable { use Notifiable; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; protected $casts = [ 'email_verified_at' => 'datetime', ]; public function sendPasswordResetNotification($token) { $this->notify(new ResetPasswordNotification($token)); } }
dans le fichier reset.blade.php dans resources \ views \ admin \ passwords code> Dossier
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\ResetsPasswords; use Illuminate\Http\Request; use Illuminate\Support\Facades\Password; class ResetPasswordController extends Controller { use ResetsPasswords; protected $redirectTo = 'admin/dashboard'; public function showResetForm(Request $request, $token = null) { return view('admin.passwords.reset')->with( ['token' => $token, 'email' => $request->email] ); } public function __construct() { $this->middleware('guest:admin'); } public function broker() { return Password::broker('admins'); } }
et fichier login.blade.php dans le dossier resources \ views \ admin
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Foundation\Auth\SendsPasswordResetEmails; use Illuminate\Support\Facades\Password; class ForgotPasswordController extends Controller { use SendsPasswordResetEmails; public function showLinkRequestForm() { return view('admin.passwords.email'); } public function __construct() { $this->middleware('guest:admin'); } public function broker() { return Password::broker('admins'); } }
Setp 6: fichier ResetPasswordNotification.php dans le dossier app \ Notifications
<?php return [ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'jwt', 'provider' => 'users', 'hash' => false, ], // Admin guards 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], 'admin-api' => [ 'driver' => 'token', 'provider' => 'admins', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], // 'users' => [ // 'driver' => 'database', // 'table' => 'users', // ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], 'admins' => [ 'provider' => 'admins', 'table' => 'password_resets', 'expire' => 60, 'throttle' => 60, ], ], 'password_timeout' => 10800, ];
toute personne ici qui peut répondre à cette question.