【问题标题】:Auth(guard )function is not working in laravel 5.6Auth(guard) 功能在 laravel 5.6 中不起作用
【发布时间】:2020-11-05 05:29:34
【问题描述】:

我为(用户、客户端)用户做了多个两种不同的身份验证,这是默认的一种,我为我的管理员维护它。用户默认一个正在工作,但我尝试使用我的前端登录它不工作总是返回此代码 (return redirect()->back()->withInput($request->only('email'));) 我不明白我在哪里犯了错误。请帮我解决这个问题。

我附上了我的代码。

Auth.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],

        'client' => [
            'driver' => 'session',
            'provider' => 'clients',
        ],

        'client-api' => [
            'driver' => 'token',
            'provider' => 'clients',
        ],
    ],

'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],

        'clients' => [
            'driver' => 'eloquent',
            'model' => App\client::class,
        ],

        // 'users' => [
        //     'driver' => 'database',
        //     'table' => 'users',
        // ],
    ],

'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],

        'clients' => [
            'provider' => 'clients',
            'table' => 'password_resets',
            'expire' => 60,
        ],
    ],

Web.php

Route::namespace('Frontend')->group(function (){
    Route::get('/client_login','ClientLoginController@showLogin')->name('Client_Login');
    Route::post('/client_login','ClientLoginController@login')->name('Client_Login.submit');
});

client.php(模型)

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;


class client extends Authenticatable
{
    use Notifiable;

    protected $guard = 'client';

    protected $table='clients';

    protected $hidden = [
        'password', 'remember_token',
    ];
}

ClientLoginController.php

<?php

namespace App\Http\Controllers\Frontend;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Auth;


class ClientLoginController extends Controller
{
    public function __construct()
    {
        $this->middleware('guest:client');
    }


    public function showLogin()
    {
        return view('client_login');
    }

    public function login(Request $request)
    {

        if(Auth::guard('client')->attempt(['email'=>$request->email,'password'=>Hash::make($request->password)],$request->remember))
        {
            return redirect()->intended(route('FrontClient.index'));
        }

        return redirect()->back()->withInput($request->only('email'));
    }

}

【问题讨论】:

    标签: laravel authentication laravel-5.6


    【解决方案1】:

    您将普通文本密码传递给attempt而不是散列值。您无法对哈希进行精确比较,它们会发生变化。您只能对它们进行“哈希检查”。

    ->attempt(['email' => ..., 'password' => $request->input('password')], ...)
    

    说明为什么不能直接比较哈希的示例:

    $one = bcrypt('test');
    // "$2y$10$ZJrZ9av0Uc3dcygOmkpsZ.PjdmUHXojLu.NmI2EnpNS5mpBBX5JvO"
    
    $two = bcrypt('test');
    // "$2y$10$0R0phwLB.6T6oQkj5XcvPetQntUxmjivR4ddiEdGPQ4cW0M2fES8C"
    
    $one != $two;  // true
    

    【讨论】:

    • Auth::guard('client')->attempt(['email'=>$request->email,'password'=>Hash::make($request->password)] ,$request->remember) 我也尝试过,但不起作用
    • 好吧,您没有阅读答案..您确实 not 传递密码的散列版本,您将 plain 文本版本传递给attempt :)
    • Auth::guard('client')->attempt(['email'=>$request->email,'password'=>$request->password],$request->remember ) 像这样?
    • 当然,试一试:-)
    • 有什么问题?
    猜你喜欢
    • 2017-01-06
    • 2014-12-17
    • 2022-01-26
    • 2016-09-07
    • 2016-07-30
    • 2019-10-01
    • 2019-10-13
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多