Sau rất nhiều lần đào và rất nhiều câu hỏi & câu trả lời, cuối cùng tôi cũng đã làm việc được với Laravel 5.2 Multi Auth với hai bảng, vì vậy tôi đang viết Trả lời câu hỏi của riêng tôi.
Cách triển khai Multi Auth trong Larvel 5.2
Như đã đề cập ở trên. Hai bàn admin
vàusers
Laravel 5.2 có một artisan
lệnh mới .
php artisan make:auth
nó sẽ tạo cơ bản đăng nhập / đăng ký route
, view
và controller
cho user
bảng.
Tạo một admin
bảng như users
bảng cho đơn giản.
Trình điều khiển dành cho quản trị viên
app/Http/Controllers/AdminAuth/AuthController
app/Http/Controllers/AdminAuth/PasswordController
(lưu ý: Tôi vừa sao chép các tệp này từ app/Http/Controllers/Auth/AuthController
đây)
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
Thêm hai phương thức và chỉ định $redirectTo
và$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');
}
nó sẽ giúp bạn mở một hình thức đăng nhập khác cho quản trị viên
tạo một phần mềm trung gian cho 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);
}
}
đăng ký phần mềm trung gian trong kernel.php
protected $routeMiddleware = [
'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
];
sử dụng phần mềm trung gian này AdminController
, vd
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');
}
}
Đó là tất cả cần thiết để làm cho nó hoạt động và cũng để có được json sử dụng quản trị viên xác thực
Auth::guard('admin')->user()
Chỉnh sửa - 1
Chúng tôi có thể truy cập trực tiếp người dùng được xác thực bằng cách sử dụng
Auth::user()
nhưng nếu bạn có hai bảng xác thực thì bạn phải sử dụng
Auth::guard('guard_name')->user()
để đăng xuất
Auth::guard('guard_name')->user()->logout()
cho người dùng xác thực json
Auth::guard('guard_name')->user()
Chỉnh sửa 2
Bây giờ bạn có thể tải xuống Dự án được thực hiện bởi Multiauth Multimuth http://imrealashu.in/code/laravel/multi-auth-with-laravel-5-2-2/
protected $guard = 'guard_name'
có thể được sử dụng ngay bây giờ.