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


172

사용자관리자 양식 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.6의 버그를 수정했습니다. protected $guard = 'guard_name'지금 사용할 수 있습니다.
imrealashu

Laravel에는 많은 관리자 패널 생성기 패키지가 있습니다. Voyager Admin을 선호합니다. 쉽고 간편하게 설치하십시오. 많은 코드를 저장할 수 있습니다. 작동 방식 만 이해하면됩니다. 바퀴를 재발 명하지 마십시오. Voyager-누락 된 라 라벨 관리자 Gentelella 부트 스트랩 관리자 tempalte가있는 라 라벨 애플리케이션.
sathish R

답변:


201

많은 발굴과 많은 질문과 답변을 마친 후 마침내 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/를 다운로드 할 수 있습니다


고마워, 이것은 내가 찾던 것이었고, 약간의 수정 작업을했습니다. Q는 +1, Ans는 +1 덕분에 더 +1 할 수 있기를 바랍니다. 정말 고마워 ..
rummykhan

@ imrealashu, 귀하의 답변에 따라 프로젝트를 만들었습니다. 그러나 이름이 같은 여러 클래스의 오류가 발생합니다. 그럼 어때요? 관리자 인증을 위해 클래스 이름을 변경하면 어디에서 변경해야합니까?
Akshay Vaghasiya

1
관리자 가드의 "비밀번호 재설정"방법에 대해서도 설명해주십시오.
Shoaib Rehan

1
훌륭한 설명 덕분에 모든 것이 매우 유용했습니다. 미들웨어 게스트를 사용하려면 RedirectIfAuthenticated.php 파일을 다음 줄로 변경하십시오. Original : if (Auth :: guard ($ guard) -> check ()) { return redirect ('/'); } 변경 후 : if (Auth :: guard ('yourcustomguard') -> check () || Auth :: check ()) { return redirect ('/'); }
Cristian Meza

1
@Jeffz는 문서가 잘못되어 있고 다중 인증에 대한 실례가 없기 때문에 좋은 문서를 기대합니다.이 5.3 업데이트의 새로운 멋진 기능이 있습니다.
imrealashu

2

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

에서 route.php:

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

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


다중 인증 zip 파일을 ezisting 프로젝트 파일로 교체 한 후 DB를 마이그레이션 할 때이 오류 표시가 표시됩니다.
G Naga Subrahmanyam

실제로 나를 위해 관리자가 로그인했지만 관리자로 리디렉션되지 않았습니다. 이 작업을 수행 한 후 작동하는 이유를 알려줄 수 있습니까? 나는 Route::group(['middleware' => ['admin']], function () { //Admin Routes... });그것이 나를 위해 작동하지 않는 원인으로 가능한 다른 경로를 등록해야했습니다
Leap Hawk

0

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();

건배.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.