Laravel将密码重置链接发送给单独的身份验证保护

Cow*_*irl 7 php authentication laravel laravel-5 laravel-5.4

在Laravel 5.4中,有没有办法将密码重置链接发送到单独的身份验证保护而不是默认保护.我正在使用PasswordResetController以这种方式完成工作的默认值

 public function company(Request $request)
    {
        $this->validate(request(), [
            'email' => 'required|email',
        ]);
        $response = Password::sendResetLink([
            'email' => $request->email
        ]);

        //overridden if condition 
        if($response == "passwords.sent")
        {
        return back()->with('message','Password reset link has been sent, please check your email');
        }

        return back()->with('message', 'No such email address in our records, try again');
    } 
Run Code Online (Sandbox Code Playgroud)

sendResetLink()方法检查并将重置链接发送到默认保护,但我在auth.php被调用中定义了一个新的保护web

 'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'companies',
        ],
Run Code Online (Sandbox Code Playgroud)

sendResetLink 方法是这样的

  public function sendResetLink(array $credentials)
    {
        // First we will check to see if we found a user at the given credentials and
        // if we did not we will redirect back to this current URI with a piece of
        // "flash" data in the session to indicate to the developers the errors.
        $user = $this->getUser($credentials);

        if (is_null($user)) {
            return static::INVALID_USER;
        }
Run Code Online (Sandbox Code Playgroud)

此方法的任何方法都可以在单独的表中检查或使用单独的auth guard?

Mah*_*esi 7

这是我的方法,如何将密码重置链接发送到作为多auth系统的一部分的保护.

我将假设你已经正确设置了你的新警卫,config/auth.php 其中可能看起来像下面的代码:

为了更好地理解,我使用" 管理"这个词作为新警卫的名字.

'guards' => [

    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],
]

'providers' => [

    'admins' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ],
]


 'passwords' => [

    'admins' => [
        'provider' => 'admins',
        'table' => 'password_resets',
        'expire' => 15,
    ],
]
Run Code Online (Sandbox Code Playgroud)

您必须为新警卫创建新的控制器(AdminForgotPasswordControllerAdminResetPasswordController)

他们都使用Password立面并AdminResetPasswordController使用Auth外观.

根据您的新警卫修改构造函数.
因此,将它添加到两个控制器,因为我们有特定类型的访客用户.

public function __construct()
{
    $this->middleware('guest:admin');
}
Run Code Online (Sandbox Code Playgroud)

现在我们需要告诉AdminResetPasswordController使用适当的防护来进行身份验证.

所以将此方法添加到控制器

protected function guard()
{
  return Auth::guard('admin');
}
Run Code Online (Sandbox Code Playgroud)

现在将这段代码添加到两个控制器.

protected function broker()
{
  return Password::broker('admins'); //set password broker name according to guard which you have set in config/auth.php
}
Run Code Online (Sandbox Code Playgroud)

注意:这不是实现密码重置的唯一步骤,您必须采取其他步骤,如创建新路由,通知,表单和相应的视图.


Dhi*_*raj 7

在 auth.php 配置文件中,您可以配置多个“守卫”,它们可用于定义多个用户表的身份验证行为。您可以通过覆盖控制器上的守卫方法来自定义包含的内容 ResetPasswordController以使用您选择的守卫。此方法应该返回一个守卫实例:

protected function guard()
{
    return Auth::guard('guard-name');
}
Run Code Online (Sandbox Code Playgroud)

神奇之处在于使用broker- PasswordBroker 作为您的自定义防护。但是,您请确保在 auth.php 配置文件中设置多个密​​码代理。

protected function broker()
{

    return Password::broker('name');
}
Run Code Online (Sandbox Code Playgroud)