当前位置: 首页 > 知识库问答 >
问题:

Laravel 5:我应该如何将Auth::admin()实现为Auth::guest()?

高经艺
2023-03-14

我想有管理员授权。所以我在中间件有了新的类

class Admin {

public function handle($request, Closure $next)
{

    if ( Auth::check() && Auth::user()->isAdmin() )
    {
        return $next($request);
    }

    Session::flash('message', 'You need to be an administrator to visit this page.');

    return redirect('/');

}

}

然后注册在Kernel.php通过添加

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
    'admin' => \App\Http\Middleware\Admin::class, //added line
];

我还在用户模型中定义了isAdmin()。当我在路线中执行此操作时,它会起作用:

get('protected', ['middleware' => ['auth', 'admin'], function() {
    return "this page requires that you be logged in and an Admin";
}]);

但是我想像Auth::admin()一样使用它作为Auth::guest(),我应该在哪里实现这个函数?我需要先在Guard.php中使用抽象admin()吗?

我可以与Auth::用户()-

谢谢。

谢谢。

共有1个答案

锺离飞尘
2023-03-14

首先,您不需要在路由中同时包含身份验证和管理中间件,因为您已经在管理中间件中检查了身份验证。

get('protected', ['middleware' => ['admin'], function() {
    return "this page requires that you be logged in and an Admin";
}]);

对于您的问题,首先,您需要扩展\illumb\Auth\Guard,并使用它。假设你的应用程序文件夹中有一个扩展文件夹。

namespace App\Extensions;

use Illuminate\Auth\Guard;

class CustomGuard extends Guard
{
    public function admin()
    {
        if ($this->user()->isAdmin()) {
            return true;
        }
        return false;
    }
}

然后在你的AppService提供商中,

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Auth\EloquentUserProvider;
use App\Extensions\CustomGuard;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {  
        Auth::extend('eloquent.admin', function ($app) {
            $model = $app['config']['auth.model'];
            $provider = new EloquentUserProvider($app['hash'], $model);
            return new CustomGuard($provider, \App::make('session.store'));
        });
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}

最后,在config/auth.php文件中,按如下所示更改行。

'driver' => 'eloquent.admin'

那你应该没事了。

 类似资料:
  • AUTH password 通过设置配置文件中 requirepass 项的值(使用命令 CONFIG SET requirepass password ),可以使用密码来保护 Redis 服务器。 如果开启了密码保护的话,在每次连接 Redis 服务器之后,就要使用 AUTH 命令解锁,解锁之后才能使用其他 Redis 命令。 如果 AUTH 命令给定的密码 password 和配置文件中的密码

  • 用户认证 // 判断当前用户是否已认证(是否已登录) Auth::check(); // 获取当前的认证用户 Auth::user(); // 获取当前的认证用户的 ID(未登录情况下会报错) Auth::id(); // 通过给定的信息来尝试对用户进行认证(成功后会自动启动会话) Auth::attempt(['email' => $email, 'password' => $password]

  • 修改请求头的authorization字段,这个字段是网页401弹出的输入框中输入用户名和密码的Base64编码,配置方式: pattern auth://username:password # 或者采用json格式 pattern auth://filepath filepath为Values里面的{key}或者本地文件(如:e:\test\xxx、e:/test/xxx、/User/use

  • 很好的一天。我正在尝试使用laravel。但我有点困惑。 我已经登录并注册。 这是我的登录过程 我正在使用作为我的表,所以我更改了这个 但是登录后出现的问题。我得到这个错误 传递给Illumb\Auth\EloquentUserProvider::validateCredentials()的参数1必须是Illumb\Contracts\Auth\Authenticatable的实例,给定的App\

  • Basicauth 中间件提供了Http Basic认证,是一个 Tango 的中间件。 安装 go get github.com/tango-contrib/basicauth 示例 type AuthAction struct {} func (a *AuthAction) Get() string { return "200" } func main() { tg := ta

  • 通用授权 自动登录授权 开放平台授权