3
votes

Comment réinitialiser le mot de passe pour l'administrateur avec une table différente dans laravel 5.6?

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


1 commentaires

toute personne ici qui peut répondre à cette question.


4 Réponses :


0
votes

Avez-vous ajouté le tableau dans votre modèle App \ Dashboard \ Admin?

protected $table = 'admins';


1 commentaires

désolé, mais j'ai essayé mais n'a pas fonctionné .. d'autres idées?



0
votes

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');
    }


0 commentaires

2
votes

É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,
    ],
],

Source: https://medium.com/backenders-club/password-brokers-reset -passwords-on-multiple-tables-in-laravel-73068542925c


0 commentaires

0
votes

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,

];

Source: https://medium.com/backenders-club/password-brokers-reset-passwords-on-multiple-tables-in-laravel -73068542925c


0 commentaires