Laravel5.3使用auth登录验证

1.使用命令行直接设置


想要更快上手?只需要在新安装的Laravel应用下运行php artisan make:auth ,然后在浏览器中访问http://my/register ,该命令会生成用户登录注册所需要的所有东西。

Laravel 提供了几个预置的认证控制器,位于 App\Http\Controllers\Auth 命名空间下,RegisterController 用于处理新用户注册,

LoginController 用于处理用户登录认证,ForgotPasswordController 用于处理重置密码邮件链接,

ResetPasswordController 包含重置密码逻辑,每个控制器都使用 trait 来引入它们需要的方法。对很多应用而言,你根本不需要修改这些控制器。


路由

Laravel 通过运行如下命令可快速生成认证所需要的路由和视图:

php artisan make:auth

运行该命令会生成注册和登录视图,以及所有的认证路由,同时生成 HomeController 用于处理应用的登录请求。


视图

正如上面所提到的,php artisan make:auth 命令会在 resources/views/auth 目录下创建所有认证需要的视图。

make:auth 命令还创建了 resources/views/layouts 目录,该目录下包含了应用的基础布局文件。所有这些视图都使用了 Bootstrap CSS 框架,

你也可以根据需要对其进行自定义。

如图:


认证

现在你已经为自带的认证控制器设置好了路由和视图,接下来我们来实现新用户注册和登录认证。你可以在浏览器中访问定义好的路由,

认证控制器默认已经包含了注册及登录逻辑(通过trait)。


自定义路径

当一个用户成功进行登录认证后,默认将会跳转到/home,你可以通过在LoginControllerRegisterControllerResetPasswordController

中定义 redirectTo属性来自定义登录认证成功之后的跳转路径:

protected $redirectTo = '/';

当一个用户登录认证失败后,默认将会跳转回登录表单对应的页面。


自定义Guard

你还可以自定义用于实现用户注册登录的“guard”,要实现这一功能,需要在 LoginControllerRegisterControllerResetPasswordController

中定义 guard 方法,该方法将会返回一个guard实例:

use Illuminate\Support\Facades\Auth;

protected function guard()
{
    return Auth::guard('guard-name');
}


自定义验证/存储

要修改新用户注册所必需的表单字段,或者自定义新用户字段如何存储到数据库,你可以修改 RegisterController 类。该类负责为应用验证输入参数和创建新用户。

RegisterController  的 validator 方法包含了新用户注册的验证规则,你可以按需要自定义该方法。

RegisterController  的 create 方法负责使用 Eloquent ORM 在数据库中创建新的 App\User 记录。当然,你也可以基于自己的需要自定义该方法.


获取认证用户

你可以通过 Auth 门面访问认证用户:

$user = Auth::user();

2.手动认证用户


当然,你也可以不使用 Laravel 自带的认证控制器。如果你选择移除这些控制器,你需要直接使用 Laravel 认证类来管理用户认证。别担心,这很简单!

我们将会通过 Auth 门面来访问认证服务,因此我们需要确保在类的顶部导入了 Auth 门面,让我们看看 attempt方法:

<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Auth;

class AuthController extends Controller
{
    /**
     * Handle an authentication attempt.
     *
     * @return Response
     */
    public function authenticate()
    {
        if (Auth::attempt(['email' => $email, 'password' => $password])) {
            // Authentication passed...
            return redirect()->intended('dashboard');
        }
    }
}

attempt 方法接收键值数组对作为第一个参数,数组中的值被用于从数据表中查找用户,因此,在上面的例子中,用户将会通过email 的值获取,如果用户被找到,

经哈希运算后存储在数据中的密码将会和传递过来的经哈希运算处理的密码值进行比较。如果两个经哈希运算的密码相匹配那么将会为这个用户开启一个认证Session。

如果认证成功的话 attempt 方法将会返回 true。否则,返回 false

重定向器上的 intended 方法将用户重定向到登录之前用户想要访问的 URL,在目标 URL 无效的情况下回退 URI 将会传递给该方法。


指定额外条件

如果需要的话,除了用户邮件和密码之外还可以在认证查询时添加额外的条件,例如,我们可以验证被标记为有效的用户:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // The user is active, not suspended, and exists.
}

注:在这些例子中,并不仅仅限于使用 email 进行登录认证,这里只是作为演示示例,你可以将其修改为数据库中任何其他可用作“username”的字段。


访问指定 Guard 实例

你可以使用 Auth 门面的 guard 方法指定想要使用的 guard 实例,这种机制允许你在同一个应用中对不同的认证模型或用户表实现完全独立的用户认证。

传递给 guard 方法的 guard 名称对应配置文件 auth.php 中 guards 配置的某个键:

if (Auth::guard('admin')->attempt($credentials)) {
    //
}

自定义的Guard

在配置文件 config/auth.php 中切换到新的用户提供者。首先,定义一个使用新驱动的 provider

'providers' => [
    'users' => [
        'driver' => 'riak',
    ],
],

然后,可以在你的 guards 配置中使用这个提供者:

'guards' => [
    'web' => [
        'driver' => 'session',
        'provider' => 'users',
    ],
],

在这里我使用的是数据库里的用户,这样就指定用户提供者了。

数据表结构:

CREATE TABLE `admin` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '0' COMMENT '登录名',
  `password` varchar(80) NOT NULL DEFAULT '0' COMMENT '登录密码',
  `remember_token` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `addtime` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '添加时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8 COMMENT='后台管理员';

'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'admin',
        ],
    ],
'providers' => [
        'admin' => [
            'driver' => 'database',
            'table' => 'admin',
        ],

退出

要退出应用,可以使用 Auth 门面的 logout 方法,这将会清除用户 Session 中的认证信息:

Auth::logout();



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Laravel提供了一个方便易用的Auth系统,可以用于用户认证和授权。下面是一个简单的例子,演示如何在Laravel使用Auth系统进行用户认证: 1. 创建一个用户模型 在Laravel中,可以使用Artisan命令行工具快速生成用户模型。在命令行中运行以下命令: ``` php artisan make:model User -m ``` 这个命令将在app目录下创建一个User.php文件,同时在数据库中创建一个users表格。我们可以在User模型中定义表格名称和字段: ```php use Illuminate\Foundation\Auth\User as Authenticatable; class User extends Authenticatable { protected $table = 'users'; protected $fillable = [ 'name', 'email', 'password', ]; protected $hidden = [ 'password', 'remember_token', ]; } ``` 2. 创建认证控制器 在Laravel中,可以使用Artisan命令行工具快速生成控制器。在命令行中运行以下命令: ``` php artisan make:controller AuthController ``` 这个命令将在app/Http/Controllers目录下创建一个AuthController.php文件。我们可以在这个控制器中定义登录和注册方法: ```php use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; class AuthController extends Controller { public function showLoginForm() { return view('auth.login'); } public function login(Request $request) { $credentials = $request->only('email', 'password'); if (Auth::attempt($credentials)) { return redirect()->intended('dashboard'); } return redirect('login')->withErrors([ 'email' => 'These credentials do not match our records.', ]); } public function logout() { Auth::logout(); return redirect('login'); } } ``` 在上面的代码中,showLoginForm方法用于显示登录表格。login方法用于处理登录请求,如果验证成功则将用户重定向到dashboard页面。logout方法用于注销用户。 3. 创建路由 在Laravel中,可以使用路由来定义URL和控制器方法之间的映射关系。在routes/web.php文件中添加以下路由: ```php Route::get('login', 'AuthController@showLoginForm')->name('login'); Route::post('login', 'AuthController@login'); Route::post('logout', 'AuthController@logout')->name('logout'); ``` 这些路由定义了/login,/logout和/dashboard这些URL,并将它们映射到AuthController控制器中的相应方法。 4. 创建登录表格 在Laravel中,可以使用Blade模板引擎来创建HTML页面。在resources/views/auth/login.blade.php文件中创建一个登录表格: ```php <form method="POST" action="{{ route('login') }}"> @csrf <div> <label for="email">Email</label> <input id="email" type="email" name="email" value="{{ old('email') }}" required autofocus> @error('email') {{ $message }} @enderror </div> <div> <label for="password">Password</label> <input id="password" type="password" name="password" required> @error('password') {{ $message }} @enderror </div> <div> <button type="submit">Login</button> </div> </form> ``` 在上面的代码中,我们使用Blade模板引擎创建了一个登录表格。@csrf指令用于生成一个随机的CSRF令牌,用于防止跨站请求伪造攻击。@error指令用于显示用户认证失败时的错误消息。 5. 配置认证系统 在Laravel中,可以使用config/auth.php文件来配置认证系统。可以在这个文件中配置用户模型、认证驱动、密码重置选项等等。以下是一个示例配置: ```php return [ 'defaults' => [ 'guard' => 'web', 'passwords' => 'users', ], 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', 'hash' => false, ], ], 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\User::class, ], ], 'passwords' => [ 'users' => [ 'provider' => 'users', 'table' => 'password_resets', 'expire' => 60, ], ], ]; ``` 在上面的配置中,我们指定了默认的Guard和Password Reset选项,并配置了Web Guard和API Guard。我们还指定了User Provider和Password Reset Provider。 以上就是在Laravel使用Auth系统进行用户认证的简单例子。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JSON_L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值