laravel8 Auth登录 + 路由中间件auth验证

在 Laravel 中,如果你想要使用除了默认的 users 表之外的其他用户表来进行身份验证,可以通过以下步骤进行设置:

  1. 创建新的用户模型

    首先,创建一个新的用户模型,例如 Admin,继承自 Illuminate\Foundation\Auth\User

    namespace App;
    
    use Illuminate\Foundation\Auth\User as Authenticatable;
    
    class Admin extends Authenticatable
    {
        // 定义与数据库表对应的表名
        protected $table = 'admins';
    
        // 其他属性和方法
    }
    
  2. 配置认证配置文件

    打开 config/auth.php 配置文件,找到 providers 数组,修改为如下配置:

    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class, // 指定使用的用户模型
        ],
    ],
    
  3. 更新认证相关的控制器

    如果你有自定义的认证控制器(如登录、注册等),确保在这些控制器中使用新的模型进行验证。

    use Illuminate\Support\Facades\Auth;
    
    // 使用 Admin 模型进行认证
    if (Auth::guard('web')->attempt($credentials)) {
        // 认证成功
    }
    
  4. 生成视图和路由

    如果你需要生成登录、注册等视图,可以使用 Laravel UI 包来生成对应的视图和路由。

    php artisan ui vue --auth
    

    这个命令会生成基本的身份验证视图和路由,但是你可能需要自行修改这些视图,以适应你的自定义用户表结构和字段。

  5. 数据库迁移

    确保你的数据库迁移文件中,创建了对应的 admins 表,并在模型中正确定义了表名和字段。运行迁移命令来创建数据库表:

    php artisan migrate
    

通过以上步骤,你可以在 Laravel 中成功地使用自定义的用户表进行身份验证。记得根据实际情况修改和适应你的数据库表结构和业务需求。

Auth::attempt成功之后 在其他地方获取不到的原因:
查看 app/Providers/RouteServiceProvider.php 你使用的中间件是什么
再去app/Http/Kernel.php 看你的中间件有没有使用
\App\Http\Middleware\EncryptCookies::class,
\Illuminate\Session\Middleware\StartSession::class,
这两个默认一般不使用 加上就好了

验证登录失败跳转 默认路由是login
Route::any(‘admins/login_auth’, [AdminsController::class, ‘loginAuth’])->name (‘admins.login_auth’);
主要修改的是 name里边的参数
想要更改 在app/Http/Middleware/Authenticate.php

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laravel提供了多种登录验证方式,包括基于表单认证、基于API认证、基于社交媒体认证等。 以下是基于表单认证的登录验证示例: 1. 创建认证控制器 可以使用Artisan命令快速生成: ``` php artisan make:auth ``` 这将创建一个控制器和视图文件,用于用户登录、注册、密码找回等操作。 2. 配置路由 在routes/web.php文件中添加以下路由: ``` Route::get('login', 'Auth\LoginController@showLoginForm')->name('login'); Route::post('login', 'Auth\LoginController@login'); Route::post('logout', 'Auth\LoginController@logout')->name('logout'); ``` 3. 配置认证驱动 在config/auth.php文件中配置认证驱动,例如使用Eloquent模型: ``` 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], ], ``` 4. 配置用户模型 在User模型中实现Authenticatable接口,例如: ``` use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { // ... } ``` 5. 配置登录视图 在resources/views/auth/login.blade.php视图文件中添加登录表单,例如: ``` <form method="POST" action="{{ route('login') }}"> @csrf <div class="form-group row"> <label for="email" class="col-md-4 col-form-label text-md-right">{{ __('E-Mail Address') }}</label> <div class="col-md-6"> <input id="email" type="email" class="form-control @error('email') is-invalid @enderror" name="email" value="{{ old('email') }}" required autocomplete="email" autofocus> @error('email') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <label for="password" class="col-md-4 col-form-label text-md-right">{{ __('Password') }}</label> <div class="col-md-6"> <input id="password" type="password" class="form-control @error('password') is-invalid @enderror" name="password" required autocomplete="current-password"> @error('password') <span class="invalid-feedback" role="alert"> <strong>{{ $message }}</strong> </span> @enderror </div> </div> <div class="form-group row"> <div class="col-md-6 offset-md-4"> <div class="form-check"> <input class="form-check-input" type="checkbox" name="remember" id="remember" {{ old('remember') ? 'checked' : '' }}> <label class="form-check-label" for="remember"> {{ __('Remember Me') }} </label> </div> </div> </div> <div class="form-group row mb-0"> <div class="col-md-8 offset-md-4"> <button type="submit" class="btn btn-primary"> {{ __('Login') }} </button> @if (Route::has('password.request')) <a class="btn btn-link" href="{{ route('password.request') }}"> {{ __('Forgot Your Password?') }} </a> @endif </div> </div> </form> ``` 6. 实现登录逻辑 在Auth\LoginController控制器中实现登录逻辑,例如: ``` use Illuminate\Http\Request; class LoginController extends Controller { public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { $request->session()->regenerate(); return redirect()->intended('/'); } return back()->withErrors([ 'email' => 'The provided credentials do not match our records.', ]); } } ``` 在上述代码中,首先使用$request->only()方法获取请求参数,然后使用Auth::attempt()方法进行认证,如果认证成功则调用$request->session()->regenerate()方法重新生成会话ID,最后使用redirect()方法跳转到指定页面(例如/表示首页),如果认证失败则使用back()方法返回上一页,并通过withErrors()方法返回错误信息。 7. 添加中间件 如果需要在用户访问某些页面时进行登录验证,可以添加中间件: ``` Route::get('profile', function () { // 只有已登录用户才能访问该页面 })->middleware('auth'); ``` 在上述代码中,只有已登录用户才能访问/profile页面,否则将被重定向到登录页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值