[laravel] 누구나 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의 문서에는 작동하지 않는 가드를 사용하는 다른 방법이 있습니다.

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

누군가 문제를 해결하고 내가 틀렸다면 나를 고치면 도움이 될 것입니다.



답변

많은 발굴과 많은 질문과 답변을 마친 후 마침내 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,
];

이 미들웨어를 AdminController
예를 들어

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');
    }
}

그것은 모두 작동하게하고 인증 된 관리자 사용의 json을 얻는 데 필요합니다.
Auth::guard('admin')->user()

편집-1
인증 된 사용자에게 직접 액세스 할 수
Auth::user()
있지만 인증 테이블이 두 개인 경우 사용해야합니다.

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

로그 아웃

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

인증 된 사용자 json

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

편집 2

이제 Laravel 5.2 Multiauth 구현 프로젝트 http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/를 다운로드 할 수 있습니다


답변

이것이 누군가를 도울 수 있고 이것이 미들웨어에 대한 이해 부족으로 인한 것일 수 있습니다. (@ imrealashu가 취한 단계 외에도)이 작업을 수행하기 위해해야 ​​할 일이 있습니다 …

에서 route.php:

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

이것은에 web미들웨어 그룹. 이 전에 별도의 admin미들웨어 그룹과 그룹 에 넣으려고 시도했지만 auth:admin작동하지 않았으므로 경로 자체에서 미들웨어를 관리자로 지정했을 때만 작동했습니다. 나는 이것이 왜인지 모르겠지만 다른 사람들이 내가했던 것처럼 머리카락을 뽑지 못하게하기를 바랍니다.


답변

laravel 5.6에서는 매우 쉽습니다. 그냥으로 이동 config/auth.php하고이 줄을 추가 providers배열 :

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

우리 database는 드라이버를 위해 사용 하지 않았습니다 eloquent.

이제 이것을 guards배열에 추가하십시오 :

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

이제 끝났습니다! admins 테이블로 작업 할 때 이것을 사용하십시오.

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

건배.


답변