laravelclass/lara-auth

此包为Laravel身份验证提供便捷方式

dev-main 2022-03-13 14:51 UTC

This package is auto-updated.

Last update: 2024-09-13 20:26:16 UTC


README

这是由rahmanian先生的一个班级成员编写的自定义Laravel身份验证。如果您想联系rahmanian先生

网站:alirahmanian.com

Instagram:ali.rahmanian.s.a

这个包有什么作用?

我们在Laravel入门套件身份验证中遇到了很多限制。因此,我决定制作一个身份验证包,去除许多Laravel身份验证包的限制。

功能

  • 支持不同配置的多守护者
  • 支持通知队列
  • 具有定义前后逻辑的钩子系统
  • 支持使用js抽象的ajax请求
  • 可以根据包的状态和钩子更改响应
  • 可以更改所有响应消息
  • 可以定义ajax请求的消息
  • 可以定义ajax响应后的逻辑
  • 可以自定义电子邮件的主题、发件人和...
  • 可以使用自定义电子邮件模板或内置电子邮件模板
  • 可以使用自己的身份验证模板

部署

安装此包

  composer require laravelclass/lara-auth

提供配置和ajax抽象

  php artisan laraAuth:up

在提供包之后,laraAuth.php和laraAuthAjax.js将复制到配置和公共目录

  configs/laraAuth.php
  public/laraAuthAjax.js

此包需要password_resets表才能完成密码重置;所以别忘了

  php artisan migrate

更改配置

在configs/laraAuth.php中,您可以定义发送电子邮件、身份验证、消息、属性、规则、队列等的配置

如何使用

LaraAuth::makeAjax();

LaraAuth::before(function (){
     //you're logic.if you return the response, the package will not continue and server sends you're response! 
});

LaraAuth::after(function ($status){
       //you're logic.if you return the response, the package will not continue and server sends you're response! 
       // $status is the final state of the package core before sending the response;
});

     return LaraAuth::register('Admin','admins');

默认守护者是web,默认数据库ModelName是User

请记住,您的模型必须扩展Authenticatable并使用HasApiTokens、HasFactory、Notifiable

如果您想发送注册电子邮件,只需实现MustVerifyEmail

LaraAuth Facade上的可用方法

LaravelClass\LaraAuth\Service\Facade\LaraAuth::before(\Closure $beforeClosure)

LaravelClass\LaraAuth\Service\Facade\LaraAuth::after(\Closure $afterClosure)

LaravelClass\LaraAuth\Service\Facade\LaraAuth::register($dbName = 'users' , $guard = 'web' , $extraData = null)

LaravelClass\LaraAuth\Service\Facade\LaraAuth::sendVerifyUserEmailNotification($guard= 'web', $dbName = 'User' , $notifiable = null)

LaravelClass\LaraAuth\Service\Facade\LaraAuth::canUserResetPassword($guard = 'web')

LaravelClass\LaraAuth\Service\Facade\LaraAuth::verifyEmailLink($guard = 'web')

LaravelClass\LaraAuth\Service\Facade\LaraAuth::verifyPasswordResetLink($guard = 'web' , $dbName = 'User')

LaravelClass\LaraAuth\Service\Facade\LaraAuth::login($guard = 'web')

LaravelClass\LaraAuth\Service\Facade\LaraAuth::logOut($guard = 'web')

LaravelClass\LaraAuth\Service\Facade\LaraAuth::sendResetPasswordNotification($guard = 'web' , $dbName = 'User')

LaravelClass\LaraAuth\Service\Facade\LaraAuth::makeAjax()

如何制作钩子系统

LaraAuth::before(function (){
     //you're logic.if you return the response, the package will not continue and server sends you're response! 
});

LaraAuth::after(function ($status){
       //you're logic.if you return the response, the package will not continue and server sends you're response! 
       // $status is the final state of the package core before sending the response;
});

 return LaraAuth::register('Admin','admins');

如果您想在包的核心执行的前后进行控制,您可以使用上述方法;before()和after()方法接受一个闭包,该闭包定义了您的逻辑。如果您想停止包的执行,您必须返回一个响应对象;在after()方法中,您的闭包可以接受从包核心注入的布尔值;这个布尔值决定了操作是否成功;

如何注册、登录和注销

return LaraAuth::login($guard = 'web')

return LaraAuth::logOut($guard = 'web')

return LaraAuth::register($dbName = 'users' , $guard = 'web' , $extraData = null)

所有方法都接受$guard,它确定您想从auth.php配置文件中指定的哪个守护者中使用哪个守护者

$guard和$dbname的默认值是web和User

如果您想确定$dbName,您必须传递模型名称,例如User

register()方法接受$extraData,您可以传递一个包含要插入数据库中的额外键值字段的数组

如何验证电子邮件和重置密码

return sendVerifyUserEmailNotification($guard= 'web', $dbName = 'User' , $notifiable = null)

return verifyEmailLink($guard = 'web')

return sendResetPasswordNotification($guard = 'web' , $dbName = 'User')

return verifyPasswordResetLink($guard = 'web' , $dbName = 'User')

如果您想发送验证电子邮件或重置电子邮件,只需返回send...notification方法;

如果您想验证电子邮件链接,只需返回verify....方法;

如何使用包的中间件

->middleware('laraAuthEmail')  ==> for verify email 

->middleware('laraAuthResetPassword')  ==> for password reset link

如何使用队列发送通知

'queue' => [
             'web' => [
                    'state' => true,
                    'delay' => 0,
                    'connection' => 'database',
                    'queue' => 'default'
                ],
                'admins' => [
                    'state' => false,
                    'delay' => 0,
                    'connection' => 'database',
                    'queue' => 'default'
                ],

您可以在配置目录下的laraAuth.php中找到

队列配置对重置密码通知和验证电子邮件链接都可用

您甚至可以为守护者确定它!

别忘了设置并启动您的队列工作者和队列数据库;

使用ajax请求

//put meta tag for csrf token in <heads> tag
<meta name="X-CSRF-TOKEN" content="{{csrf_token()}}">

//put below codes after all of youre template tags
<script src="{{asset('laraAuthAjax.js')}}"></script>
<script>
    const formInputs = ['email','password','password_confirmation'];
    const logic = function (laraAuthResponse){
        console.log(laraAuthResponse);
    }
    const obj = new LaraAuthAjax(logic,formInputs);
    </script>

    //in youre action route in laravel,call this method before any of operation methods:

    LaraAuth::makeAjax();

    //then you can use one of package method like:
     
     return LaraAuth::login()

只需将上述代码放入您的模板中;

LaraAuthAjax类的构造函数接受两个参数;第一个参数是一个闭包,用于定义从服务器收到响应后的逻辑;您可以在闭包中定义参数以获取json响应!第二个参数是要发送到服务器的输入名称;如果您没有,只需让它通过!

作者