如何在laravel 5.2中使用多个Auth

时间:2015-12-28 09:09:06

标签: php laravel-5

有人知道如何在laravel 5.2中使用多个身份验证!
我想使用它但我不知道怎么办?
有没有人有教程或项目设置多重身份验证?

3 个答案:

答案 0 :(得分:26)

您需要两个表{​​{1}}和users 运行命令跟随命令以创建内置身份验证

admins

两个模型用户(已存在)和管理员



php artisan make:auth




现在打开config / auth.php并进行以下更改



<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;

class Admin extends Authenticatable
{
	
}
&#13;
&#13;
&#13;

创建新的中间件'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin' => [ 'driver' => 'session', 'provider' => 'admins', ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App\Admin::class, ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], 'admins' => [ 'provider' => 'admins', 'email' => 'auth.emails.password', 'table' => 'password_resets', 'expire' => 60, ], ],

&#13;
&#13;
RedirectIfNotAdmin
&#13;
&#13;
&#13;

Kernel.php中的变化

&#13;
&#13;
<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

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('/admin/login');
		}
	
		return $next($request);
	}
}
&#13;
&#13;
&#13;

创建一个新文件夹Http / Controller / Adminauth并从Http / Controller / Auth文件夹中复制文件

打开文件Http / Controller / Adminauth / AuthController.php并进行以下更改

&#13;
&#13;
protected $middleware = [
        \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
		\Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
	];


protected $middlewareGroups = [
        'web' => [
            \App\Http\Middleware\EncryptCookies::class,
            \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
            //\Illuminate\Session\Middleware\StartSession::class,
            //\Illuminate\View\Middleware\ShareErrorsFromSession::class,
            \App\Http\Middleware\VerifyCsrfToken::class,
        ],
		
        'api' => [
            'throttle:60,1',
        ],
    ];


protected $routeMiddleware = [
        'auth' => \App\Http\Middleware\Authenticate::class,
        'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class,
        'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class,
        'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,
		'admin' => \App\Http\Middleware\RedirectIfNotAdmin::class,
    ];
&#13;
&#13;
&#13;

创建新文件夹Http / Controller / admin,从Http / Controller /

复制文件夹中的Controller.php文件

创建新文件Http / Controller / admin / employee.php

&#13;
&#13;
<?php

namespace App\Http\Controllers\Adminauth;

use App\Admin;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ThrottlesLogins;
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers;
use Auth;

class AuthController extends Controller
{
    use AuthenticatesAndRegistersUsers, ThrottlesLogins;

    protected $redirectTo = '/admin';
	protected $guard = 'admin';
	
	public function showLoginForm()
	{
		if (Auth::guard('admin')->check())
		{
			return redirect('/admin');
		}
		
		return view('admin.auth.login');
	}
	
	public function showRegistrationForm()
	{
		return view('admin.auth.register');
	}
	
	public function resetPassword()
	{
		return view('admin.auth.passwords.email');
	}
	
	public function logout(){
		Auth::guard('admin')->logout();
		return redirect('/admin/login');
	}
}
&#13;
&#13;
&#13;

移至资源/视图创建新文件夹资源/ views / admin 复制

<?php namespace App\Http\Controllers\admin; use Illuminate\Http\Request; use Illuminate\Routing\Controller; use Auth; use App\Admin; class Employee extends Controller { public function __construct(){ $this->middleware('admin'); } public function index(){ return view('admin.home'); } }

并发布到resources/views/auth, resources/views/layouts & resources/views/home.blade.php并打开admin文件夹中的每个文件并在每个路径前添加admin,现在路径应该是

resources/views/admin

你的Http / routes.php看起来像

&#13;
&#13;
@extends('admin.layouts.app')
&#13;
&#13;
&#13;

这是它在浏览器中打开您的网站并检查 并为管理员yoursiteurl / admin

享受....

答案 1 :(得分:6)

首先,我们创建两个模型:user和admin

然后,我们更新config / auth.php文件:

return [
    'defaults' => [
        'guard' => 'user',
        'passwords' => 'user',
    ],

    'guards' => [
        'user' => [
            'driver' => 'session',
            'provider' => 'user',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],
    ],
    'providers' => [
        'user' => [
            'driver' => 'eloquent',
            'model' => 'App\User',
        ],
        'admin' => [
            'driver' => 'eloquent',
            'model' => 'App\Admin',
        ],
    ],
    'passwords' => [
        'user' => [
            'provider' => 'user',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admin' => [
            'provider' => 'admin',
            'email' => 'auth.emails.password',
            'table' => 'password_resets',
            'expire' => 60,
        ]
    ]
];

现在,修改app / Http / kernel.php文件:

protected $middleware = [
    \Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class
];

protected $middlewareGroups = [
    'web' => [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class      
    ],
    'api' => [
        'throttle:60,1',
    ],
];

创建LoginController并在其中设置以下代码。

注意:您必须为&#39; user&#39;创建登录页面以及&#39; admin&#39;。然后,您必须向相应的控制器功能提交登录表单请求,即userLogin()adminLogin()

namespace App\Http\Controllers;

use Auth, Input;
use App\User;
use App\Admin;

class LoginController extends Controller
{
    public function userLogin(){
        $input = Input::all();
        if(count($input) > 0){
            $auth = auth()->guard('user');

            $credentials = [
                'email' =>  $input['email'],
                'password' =>  $input['password'],
            ];

            if ($auth->attempt($credentials)) {
                return redirect()->action('LoginController@profile');
            } else {
                echo 'Error';
            }
        } else {
            return view('user.login');
        }
    }

    public function adminLogin(){
        $input = Input::all();
        if(count($input) > 0){
            $auth = auth()->guard('admin');

            $credentials = [
                'email' =>  $input['email'],
                'password' =>  $input['password'],
            ];

            if ($auth->attempt($credentials)) {
                 return redirect()->action('LoginController@profile');                     
            } else {
                echo 'Error';
            }
        } else {
            return view('admin.login');
        }
    }

    public function profile(){
        if(auth()->guard('admin')->check()){
             pr(auth()->guard('admin')->user()->toArray());
        }         
        if(auth()->guard('user')->check()){
            pr(auth()->guard('user')->user()->toArray());
        } 
    }
}

答案 2 :(得分:0)

在大多数情况下,我只是在用户表中添加一个名为usertype的字段,并传递适当的值,如0 = admin,1 = user等。

这种方法有助于避免创建不同用户角色或类型时不必要的麻烦。

虽然这可能听起来不太理想,但有助于节省大量时间。