Programing

누구나 Laravel 5.2 다중 인증을 설명 할 수 있습니까?

lottogame 2020. 5. 31. 09:51
반응형

누구나 Laravel 5.2 다중 인증을 설명 할 수 있습니까?


사용자관리자 양식 user테이블 및 admin테이블을 각각 인증하려고합니다 . User상자에서 laravel이 제공 한대로 모델을 사용하고 Admin.가드 키와 공급자 키를 추가했기 때문에 동일한 모델을 만들었습니다.auth.php.

근위 연대

'guards' => [
    'user' =>[
        'driver' => 'session',
        'provider' => 'user',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],  

공급자

'providers' => [
    'user' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ]
],

노선

Route::group(['middleware' => ['web']], function () {
    // Login Routes.   
    Route::get('/admin/login','AdminAuth\AuthController@showLoginForm');
    Route::post('/admin/login','AdminAuth\AuthController@login');
    Route::get('/admin/logout','AdminAuth\AuthController@logout');

    // Registration Routes.
    Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
    Route::post('admin/register', 'AdminAuth\AuthController@register');

    Route::get('/admin', 'AdminController@index');
});

AuthAdminLaravel의 기본값 AuthController.phpPasswordController.php파일이 있는 디렉토리를 만들었습니다 . (그에 따라 수정 된 네임 스페이스)

우선, 라 라벨의 문서에서 작동하지 않는 것과 같이 인증하면서 커스텀 가드를 지정하는 방법에 대해 언급했습니다.
여기에 이미지 설명을 입력하십시오

Laravel의 문서에는 작동하지 않는 가드를 사용하는 다른 방법이 있습니다.

여기에 이미지 설명을 입력하십시오

누군가 문제를 해결하고 내가 틀렸다면 나를 바로 잡을 수 있다면 도움이 될 것입니다.


많은 발굴과 많은 질문과 답변을 마친 후 마침내 두 개의 테이블로 Laravel 5.2 Multi Auth를 사용할 수 있었으므로 내 자신의 질문에 대한 답변을 작성하고 있습니다.

Larvel 5.2에서 다중 인증을 구현하는 방법

상술 한 바와 같이. 두 테이블 adminusers

Laravel 5.2에는 새로운 artisan명령이 있습니다.

php artisan make:auth

그것은 기본 로그인 / 회원 가입을 생성합니다 route, view그리고 controller위한 user테이블.

간단하게하기 위해 테이블을 admin테이블로 만듭니다 users.

관리자 용 컨트롤러
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(참고 : app/Http/Controllers/Auth/AuthController여기 에서이 파일들을 복사 했습니다)

config/auth.php

//Authenticating guards
'guards' => [
    'user' =>[
        'driver' => 'session',
        'provider' => 'user',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admin',
    ],
],  

//User Providers
'providers' => [
    'user' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
    ],
    'admin' => [
        'driver' => 'eloquent',
        'model' => App\Admin::class,
    ]
],  

//Resetting Password  
'passwords' => [
    'clients' => [
        'provider' => 'client',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
    'admins' => [
        'provider' => 'admin',
        'email' => 'auth.emails.password',
        'table' => 'password_resets',
        'expire' => 60,
    ],
],  

route.php

Route::group(['middleware' => ['web']], function () {
    //Login Routes...
    Route::get('/admin/login','AdminAuth\AuthController@showLoginForm');
    Route::post('/admin/login','AdminAuth\AuthController@login');
    Route::get('/admin/logout','AdminAuth\AuthController@logout');

    // Registration Routes...
    Route::get('admin/register', 'AdminAuth\AuthController@showRegistrationForm');
    Route::post('admin/register', 'AdminAuth\AuthController@register');

    Route::get('/admin', 'AdminController@index');

});  

AdminAuth/AuthController.php

두 가지 방법을 추가 $redirectTo하고$guard

protected $redirectTo = '/admin';
protected $guard = 'admin';
public function showLoginForm()
{
    if (view()->exists('auth.authenticate')) {
        return view('auth.authenticate');
    }

    return view('admin.auth.login');
}
public function showRegistrationForm()
{
    return view('admin.auth.register');
}  

관리자 용으로 다른 로그인 양식을 여는 데 도움이됩니다.

미들웨어 만들기 admin

class RedirectIfNotAdmin
{
/**
 * Handle an incoming request.
 *
 * @param  \Illuminate\Http\Request  $request
 * @param  \Closure  $next
 * @param  string|null  $guard
 * @return mixed
 */
public function handle($request, Closure $next, $guard = 'admin')
{
    if (!Auth::guard($guard)->check()) {
        return redirect('/');
    }

    return $next($request);
}

}

미들웨어 등록 kernel.php

 protected $routeMiddleware = [
    'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
];

use this middleware in AdminController e.g.,

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Auth;

class AdminController extends Controller
{
    public function __construct(){
        $this->middleware('admin');
   }
public function index(){
        return view('admin.dashboard');
    }
}

That's all needed to make it working and also to get json of authenticated admin use
Auth::guard('admin')->user()

Edit - 1
We can access authenticated user directly using
Auth::user() but if you have two authentication table then you have to use

Auth::guard('guard_name')->user()  

for logout

Auth::guard('guard_name')->user()->logout()

for authenticated user json

Auth::guard('guard_name')->user()  

Edit 2

Now you can download Laravel 5.2 Multiauth implemented Project http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/


In case this helps anyone, and this may just be due to my lack of understanding of middleware, here's what I had to do to get this working (in addition to the steps taken by @imrealashu)...

In route.php:

Route::get('/admin', [
  'middleware' => 'admin',
  'uses' => 'AdminController@index'
]);

This is in the web middleware group. Before this I tried putting it in a separate admin middleware group and even in an auth:admin group but this didn't work, it only worked for me when I specified the middleware as admin on the route itself. I have no idea why this is but I hope it saves others from pulling their hair out like I did.


It's very easy in laravel 5.6. Just go to config/auth.php and add this line in providers array:

'admins' => [
   'driver' => 'database',
   'table' => 'admin_table'
]

Note that we used database for driver not eloquent.

Now add this to guards array:

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

Now we're done! Use this when working with admins table:

Auth::guard('admin_guard')->User();

Cheers.

참고URL : https://stackoverflow.com/questions/34614753/can-anyone-explain-laravel-5-2-multi-auth-with-example

반응형