如何使用 laravel 6 在我的软件包中使用身份验证进行自定义防护?

我正在尝试使用表格通过拉维尔包进行身份验证。在项目目录中,我在配置/身份验证中添加了警卫.phpadminsadmin


'providers' => [

        'users' => [

            'driver' => 'eloquent',

            'model' => App\User::class,

        ],


        'admins' => [

            'driver' => 'eloquent',

            'model' => App\Admin::class,

        ],


        // 'users' => [

        //     'driver' => 'database',

        //     'table' => 'users',

        // ],

    ],

在防护阵列中


    'guards' => [

        'web' => [

            'driver' => 'session',

            'provider' => 'users',

        ],


        'api' => [

            'driver' => 'token',

            'provider' => 'users',

            'hash' => false,

        ],


        'admin' => [

            'driver' => 'session',

            'provider' => 'admins',

        ],

    ],

以下是我在帕卡格内部的登录控制器


class LoginController extends Controller

{


   use AuthenticatesUsers;

   protected $redirectTo = '/admin/dashboard';

   protected function redirectTo()

   {

         return '/admin/dashboard';

   }


   public function __construct()

   {

       $this->middleware('guest')->except('logout');

   }

   public function login(Request $request)

   {   

       if(Auth::guard('admin')->attempt($request->only('email','password'), true)){

           return redirect()

               ->intended(route('dashboard'))

               ->with('status','You are Logged in as Admin!');

       }

   }


}


以下是我的仪表板控制器


class DashboardController extends Controller

{

    public function __construct()

    {

        /* dd(Auth::check()); */ //return false : just want to show you


          $this->middleware('auth:admin');

    }


    public function index()

    {

        return view('xyz::dashboard');

    }


}

在我的模型中,以下脚本就在那里Admin.php


namespace App;


class Admin extends \ABC\xyz\App\Models\Admin

{


}

当我尝试登录时,在提交有效详细信息后,它不会将我重定向到仪表板,没有任何反应。另外,当我尝试强行打开/仪表板时,它会带我进入登录页面。


同样在登录尝试之后,当我尝试它返回时,但在构造函数中返回同样的事情。以同样的方式返回用户的信息,同时返回它。我不知道我错过了什么,在哪里错过了一些东西。Auth::check()truefalsedashboardController.phpAuth::guard('admin')->user()dashboardController.phpnull


我想请你指导我。我将不胜感激。


炎炎设计
浏览 114回答 4
4回答

三国纷争

中间件 () 负责重定向经过身份验证的用户。guest\App\Http\Middleware\RedirectIfAuthenticated使用中间件时,您必须通过身份验证防护才能按如下方式使用:guest:guard示例:在登录控制器构造函数中,使用$this->middleware('guest:admin')->except('logout');而不是$this->middleware('guest')->except('logout');

qq_遁去的一_1

在仪表板控制器中使用。(返回经过身份验证的管理员)auth('admin')->user()

蓝山帝景

使用前缀定义路由时,路由名称将如下所示,URL 将类似于 。所以在这里你可以试试这个prefix.nameprefix/urlRoute::group([            'namespace' => $namespace,        'middleware' => ['web'],         'prefix' => 'admin'    ], function () {        Route::get('login', function(){            return view('xyz::auth.login');        })->name('login');        Route::post('login', 'Auth\LoginController@login')->name('tryForLogin');});Route::group(['namespace' => $namespace,'prefix' => 'admin','middleware' => 'auth'], function () {    Route::get('dashboard', function(){        return view('xyz::dashboard');    })->name('dashboard');});所有组都以“admin”为前缀,但是有一些路由或页面可以在登录时访问。

胡子哥哥

是用于定义路由终结点前缀的选项。您正在寻找该选项。prefixas// gives you routes:// GET /admin/login named "admin.login" with middleware "web"// POST /admin/login named "admin.tryForLogin" with middleware "web"Route::group([            'namespace' => $namespace,        'middleware' => ['web'],         'prefix' => 'admin',        'as' => 'admin.'    ], function () {        Route::get('login', function() {            return view('xyz::auth.login');        })        ->name('login');        Route::post('login', 'Auth\LoginController@login')->name('tryForLogin');    });// gives you routes:// GET /admin/dashboard named "admin.dashboard" with middleware "auth"Route::middleware(['auth'])->group(function () {    Route::get('/admin/dashboard', function(){        return view('xyz::dashboard');    })    ->name('admin.dashboard');});在代码更改后运行。php artisan optimize:clear
打开App,查看更多内容
随时随地看视频慕课网APP