【问题标题】:Laravel Authentication for multiple users多个用户的 Laravel 身份验证
【发布时间】:2018-09-01 16:42:43
【问题描述】:

我的应用程序中有 4 种类型的用户,详细信息存储在 4 个不同的表中,那么如何实现 Laravel 的身份验证?

Route::post('/adlogin', 'mainController@adminlogin');
Route::get('/sellerlogin', function () {
    return view('seller.pages.login');
});

Route::post('/sellerlog_in', 'mainController@sellerlogin');

【问题讨论】:

  • 使用 LoginConteoller 并在其中编写 switch case,并且还使用不同的中间件。
  • 实际上你需要澄清什么部分......你想为此使用 laravel 用户脚手架,或者你想将所有三个帐户登录一起作为一个?

标签: php laravel routing


【解决方案1】:

使用它作为你的控制器

<?php

namespace App\Http\Controllers\Auth;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

//Use Dependencies
use Auth;

class AdminLoginController extends Controller
{

这里使用的中间件是admin,你必须在config/auth.php中创建它

public function __construct()
{
    $this->middleware('guest:admin', ['except'=>'logout']);
}

为您的管理员登录创建一个视图

public function showLoginForm()
{
    return view('auth.admin_login');
}

public function login(Request $request)
{
    //Validate the Form Data
    $this->validate($request, [
        'email'=>'required|email',
        'password'=>'required|min:5'
    ]);

    //Attempt to log the Admin In
    $email= $request->email;
    $password= $request->password;
    $remember= $request->remember;

成功登录后,您要重定向的地方就像这里我正在重定向 转至admin.dashboard

    //If Successful redirect to intended location
    if (Auth::guard('admin')->attempt(['email' => $email, 'password' => $password], $remember)) {
        return redirect()->intended(route('admin.dashboard'));
    }

    //If Unsuccessful redirect back to login form with form data
    return redirect()->back()->withInput($request->only('email', 'remember'));
}

/**
 * Log the Admin out of the application.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 */
public function logout()
{
    Auth::guard('admin')->logout();

    return redirect()->route('admin.login');
}
}

注销后重定向回登录页面

确保您为正确的用户使用正确的guard。为更多用户类型创建与您想为他们创建 guards 相同的功能。

config/app.php

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
    'admin' => [
        'driver' => 'session',
        'provider' => 'admins',
    ],

    'admin-api' => [
        'driver' => 'token',
        'provider' => 'admins',
    ],
],

adminadmin-api 在此处创建为您的用户类型

添加提供者

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

最后用这个来重置密码。

'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'password_resets',
            'expire' => 60,
        ],
        'admins' => [
            'provider' => 'admins',
            'table' => 'password_resets',
            'expire' => 10,
        ],
    ],

http/middleware/redirectIfAuthenticated.php 中将此添加到您的handle 函数中

//Check for admin login guard
        switch ($guard) {
            case 'admin':
                if (Auth::guard($guard)->check()) {
                    return redirect()->route('admin.dashboard');
                }
                break;

            default:
                if (Auth::guard($guard)->check()) {
                    return redirect('/dashboard');
                }
                break;
        }

您可以为您的用户类型添加更多案例。

这就是您想要创建多重身份验证的全部内容。当您为不同的角色创建不同的表时,您必须遵循此过程。

  • 为所有用户类型创建 LoginController 或使用您的逻辑将其登录。
  • 为 auth.php 中的每个用户类型添加您的 guards
  • 将您的案例添加到RedirectIfAuthenticated

【讨论】:

    【解决方案2】:

    您可以使用laravel-permission 包。此包允许您管理数据库中的用户权限和角色。

    【讨论】:

    • Laravel-Permission 用于授权,即相同的用户不同的角色而不是不同的用户
    猜你喜欢
    • 2013-09-11
    • 2020-01-14
    • 1970-01-01
    • 2017-01-04
    • 1970-01-01
    • 2018-07-21
    • 2019-12-09
    • 2018-10-17
    • 1970-01-01
    相关资源
    最近更新 更多