首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel 7多个角色

Laravel 7多个角色
EN

Stack Overflow用户
提问于 2020-11-27 15:38:59
回答 1查看 177关注 0票数 0

我正在尝试为一个站点设置自定义角色,我跟踪了另一个堆栈溢出帖子,它似乎能让它工作,但我的却总是失败,我知道信息存在,因为我将信息倒掉,并在8月::卫兵失败后屏幕上显示信息。问题是,即使信息存在,我们的防御也会失败。

代码语言:javascript
运行
复制
if (Auth::guard('Admin')->attempt(['Username' => $Request->input('UName'), 'Password' => $Request->input('Password')]))

该信息得到验证和批准,并设法通过。

代码语言:javascript
运行
复制
 if (Admins::where('Username', $Request->input('UName'))->exists()) {
            $AdminDetails = Admins::Where('Username', $Request->input('UName'))->first();
            if(Hash::check($Request->input('Password'), $AdminDetails->Password)){
                   //user details are correct
            }
  }

我使用户和管理员都可以进行身份验证--上面的代码试图授权管理员,我还更改了config/auth.php文件,如下所示

代码语言:javascript
运行
复制
'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
            'hash' => false,
        ],
        'Admin' => [
            'driver' => 'session',
            'provider' => 'Admin',
        ],
        'User' => [
            'driver' => 'session', 
            'provider' => 'User',
        ],
    ],
代码语言:javascript
运行
复制
'providers' => [
        'User' => [
            'driver' => 'eloquent',
            'model' => App\Models\User::class,
        ],
        'Admin' => [
            'driver' => 'eloquent',
            'model' => App\Models\Admins::class,
        ]

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

模型位于正确的命名空间中,如下所示,管理身份验证如下所示

代码语言:javascript
运行
复制
<?php
namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admins extends Authenticatable
{
    use Notifiable;

    protected $guard = 'Admin';

    protected $fillable = [
        'FName', 'LName', 'Email', 'Password', 'Username'
    ];

    protected $hidden = [
        'password'
    ];
}

并且用户可以认证。

代码语言:javascript
运行
复制
<?php

namespace App\Models;


use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Users extends Authenticatable
{
    use Notifiable;

    protected $guard = 'User';

    protected $fillable = [
        'FullName', 'Email', 'CompanyName','ReferedBy','PhoneNumber','MemberStatus','CustomMessage',
    ];

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

Laravel 7没有显示任何错误或任何内容,但尝试将用户记录在其中的如果不正确,则会失败。

另外,Admin模型的迁移是

代码语言:javascript
运行
复制
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateAdminsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('admins', function (Blueprint $table) {
            $table->id();
            $table->string('Username');
            $table->string('FName');
            $table->string('LName');
            $table->string('Email');
            $table->string('Password');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('admins');
    }
}

我知道这是一个很大的问题,但我知道这一切都与问题有关。谢谢你提供的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-27 15:43:03

当向Auth::attempt传递凭据数组时,保存密码的元素必须被命名为password,它与表中的任何字段名无关。这是用户提供程序知道哪个字段应该是“密码”的方式,因为它需要进行散列检查;除了凭据中的password之外,其他每个字段都是查询的条件。

代码语言:javascript
运行
复制
['Username' => ..., 'password' => ...]

如果您的模型/表使用的密码字段与password不同,则必须通过定义getAuthPassword方法告诉模型:

代码语言:javascript
运行
复制
public function getAuthPassword()
{
    return $this->Password;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65039995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档