Laravel-Auth认证
阅读原文时间:2023年07月09日阅读:3

1.建立数据表 admins

2.找到config下的auth.php 文件,加入如下代码

\[ 'guard' => 'web', 'passwords' => 'users', \], /\* |-------------------------------------------------------------------------- | Authentication Guards |-------------------------------------------------------------------------- | | Next, you may define every authentication guard for your application. | Of course, a great default configuration has been defined for you | here which uses session storage and the Eloquent user provider. | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | Supported: "session", "token" | \*/ 'guards' => \[ 'web' => \[ 'driver' => 'session', 'provider' => 'users', \], 'api' => \[ 'driver' => 'token', 'provider' => 'users', 'hash' => false, \], //加入admin,注意:admin 和app目录的admin.php名字要一致 'admin' => \[ 'driver' => 'session', 'provider' => 'admins' \] \], /\* |-------------------------------------------------------------------------- | User Providers |-------------------------------------------------------------------------- | | All authentication drivers have a user provider. This defines how the | users are actually retrieved out of your database or other storage | mechanisms used by this application to persist your user's data. | | If you have multiple user tables or models you may configure multiple | sources which represent each model / table. These sources may then | be assigned to any extra authentication guards you have defined. | | Supported: "database", "eloquent" | \*/ 'providers' => \[ 'users' => \[ 'driver' => 'eloquent', 'model' => App\\User::class, \], //admins 是刚才建立的admins表,名字同样也要保持一致 'admins' => \[ 'driver' => 'eloquent', 'model' => App\\Admin::class \] // 'users' => \[ // 'driver' => 'database', // 'table' => 'users', // \], \], /\* |-------------------------------------------------------------------------- | Resetting Passwords |-------------------------------------------------------------------------- | | You may specify multiple password reset configurations if you have more | than one user table or model in the application and you want to have | separate password reset settings based on the specific user types. | | The expire time is the number of minutes that the reset token should be | considered valid. This security feature keeps tokens short-lived so | they have less time to be guessed. You may change this as needed. | \*/ 'passwords' => \[ 'users' => \[ 'provider' => 'users', 'table' => 'password\_resets', 'expire' => 60, 'throttle' => 60, \], \], /\* |-------------------------------------------------------------------------- | Password Confirmation Timeout |-------------------------------------------------------------------------- | | Here you may define the amount of seconds before a password confirmation | times out and the user is prompted to re-enter their password via the | confirmation screen. By default, the timeout lasts for three hours. | \*/ 'password\_timeout' => 10800, \]; **3.在app下建立admin.php** 'required', 'password'=>'required' \]; } ?>

4.建立AdminsController

<?php

namespace App\Http\Controllers;

use App\Http\Requests\UserRequest;
use Illuminate\Support\Facades\Auth;

class AdminsController extends Controller
{
//
public function login(){
//echo bcrypt('123456');
//die();
return view('admins.login');
}

public function dologin(UserRequest $request){  
    $credentials = $request->only('username', 'password');  
    /\*\*  
     \* 使用laravel自带的Auth登录  
     \* 1、密码使用的是hash加密 $crypt = password\_hash($password, PASSWORD\_DEFAULT);  
     \*/  
    if(Auth::guard('admin')->attempt($credentials)){  
        return response()->json(\['code' => 200, 'msg' => '登录成功'\]);  
    }else{  
        return response()->json(\['code' => 403, 'msg' => '用户名或密码错误'\]);  
    }  
}  

}

5.建立登录视图页面

用户登录


@csrf @if (count($errors) > 0)
    @foreach ($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

6.建立中间件,并配置中间件

Route::group(['prefix' =>'admin','middleware'=>['adminauth']],function(){
Route::get('shop/list','ShopController@index');
});

Route::get('admins/login','AdminsController@login');
Route::post('admins/dologin','AdminsController@dologin');

<?php

namespace App\Http\Middleware;

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

class AdminAuth
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next, $guard = null)
{
//如果没有指定的话,默认 guard 是 web,
//dump(Auth::guard($guard)->check()); 判断用户是否认证
//Auth::guard($guard)->user() 获取用户信息
//Auth::guard($guard)->guest() 是否是来宾
if(Auth::guard($guard)->guest()){
if($request->ajax() || $request->wantsJson()){
return response('Unauthorized.', 401);
}else{
return redirect()->guest('admins/login');
}
}

    return $next($request);  
}  

}

7.如果你在登录页面使用了验证码的话,可以借助独立验证器进行验证

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class UserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}

/\*\*  
 \* Get the validation rules that apply to the request.  
 \*  
 \* @return array  
 \*/  
public function rules()  
{  
    return \[  
        //  
        'username' => 'required|max:30|min:6',  
        'password' => 'required|min:6',  
        'code' => 'required|captcha'  
    \];  
}  
public function messages()  
{  
    return \[  
        'username.required' => '账号不能为空',  
        'username.max' => '账号过长',  
        'username.min' => '账号格式不正确',  
        'password.required' =>'密码不能为空',  
        'password.min' => '密码过于简单',  
        'code.required' =>'验证码不能为空',  
        'code.captcha' => '验证码错误'  
    \];  
}  

}

8.登录页面展示