• Laravel使用Passport 实现api认证--https://www.jianshu.com/p/8580f7c3ae11


    1、安装passport

    首先通过 Composer 包管理器安装 Passport

    composer require laravel/passport
    

    生成auth相关:

    php artisan make:auth
    

    接下来,将 Passport 的服务提供者注册到配置⽂件 config/app.php 的providers 数组中:

    'providers' => [
            ......
            LaravelPassportPassportServiceProvider::class 
    

    Passport 服务提供器使用框架注册自己的数据库迁移目录,因此在注册提供器后,就应该运行 Passport 的迁移命令来自动创建存储客户端和令牌的数据表:

    php artisan migrate
    
     
    migrate.png

    注:现在的laravel版本默认字符编码为utf8mb4。utf8 的 varchar 类型字符串最长255,换成utf8mb4最长是191,然而框架里面默认长度还是用的 255 所以会导致长度不够

    下面来修改app/Providers/AppServiceProvider.php:

    namespace AppProviders;
    
    use LaravelPassportPassport;
    use IlluminateSupportServiceProvider;
    use Schema;
    
    class AppServiceProvider extends ServiceProvider
    {
        /**
         * Bootstrap any application services.
         *
         * @return void
         */
        public function boot()
        {
            // set utf8mb4 length
            Schema::defaultStringLength(191);
    
            // Register auth routes
            Passport::routes();
        }
    

    然后运行 passport:install 命令来创建生成安全访问令牌时用到的加密密钥,同时,这条命令也会创建「私人访问」客户端和「密码授权」客户端:

    php artisan passport:install
    

    然后LaravelPassportHasApiTokens Trait 添加到 AppUser 模型中,这个 Trait 会给你的模型提供一些辅助函数,用于检查已认证用户的令牌和使用作用域:

    namespace App;
    
    use LaravelPassportHasApiTokens;
    use IlluminateNotificationsNotifiable;
    use IlluminateFoundationAuthUser as Authenticatable;
    
    class User extends Authenticatable
    {
        use HasApiTokens,Notifiable;
    
        protected $table = 'users';
    

    配置文件 config/auth.php 中 api 部分的driver改为 passport 。

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

    2、添加路由

    打开 routes/api.php 文件添加注册,登录 ,用户详情的路由


     
    routes.png

    然后添加控制器,这里我在Controller下创建了Api的子文件夹


     
    Controller.png

    UserController代码如下:

    <?php
    
    namespace AppHttpControllersApi;
    
    use Validator;
    use AppUser;
    use IlluminateHttpRequest;
    use AppHttpControllersController;
    use IlluminateSupportFacadesAuth;
    
    class UserController extends Controller
    {
        // successCode
        public $SuccessCode = 200;
    
    
        /**
         * login function
         *
         * @return void
         */
        public function login()
        {
            if(Auth::attempt(['email'=>request('email'),'password'=>request('password')]))
            {
                $user = Auth::user();
                $success['token'] = $user->createToken('MyApp')->accessToken;
                return Response()->json(['success'=>$success],$this->SuccessCode);
            }else{
                return Response()->json(['error'=>'Unauthorised'],401);
            }
        }
    
        /**
         * register function
         *
         * @param Request $request
         * @return void
         */
        public function register(Request $request)
        {
            $validator = Validator::make($request->all(),[
                'name'       => 'required',
                'email'      => 'required|email',
                'password'   => 'required',
                'C_password' => 'required|same:password',
            ]);
    
            if($validator->fails())
            {
                return Response()->json(['error'=>$validator->errors()],401);
            }
    
            // 这里根据自己表结构修改
            $input                         = $request->all();
            $input['password']             = bcrypt($input['password']);
            $input['avatar']               = '/images/avatars/default.jpg';
            $input['emailverfiy_token']    = '';
            $input['state']                = 1;
            $user                          = User::create($input);
            $success['token']              = $user->createToken('MyApp')->accessToken;
            $success['name']               = $user->name;
    
            return Response()->json(['success'=>$success],$this->SuccessCode);
        }
    
        /**
         * get user infomation function
         *
         * @return void
         */
        public function details()
        {
            $user = Auth::user();  
            return response()->json(['success' => $user], $this->successStatus);
        }
    }
    

    接口测试

    • 注册接口:


       
      注册接口.png
    • 登陆接口


       
      登陆接口.png
    • 用户信息接口


       


    作者:千年面包
    链接:https://www.jianshu.com/p/8580f7c3ae11
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    vue开发环境搭建
    超出宽度省略号,css解决办法
    css平板手机pc媒体查询
    pc和移动端调用qq聊天
    fiddeler 抓包工具的配置使用
    给证件照换背景颜色
    markman高效的设计稿标注、测量工具
    画三角形和直角三角形
    vue中使用Ueditor编辑器 -- 1
    js获取浏览器缩放比例
  • 原文地址:https://www.cnblogs.com/liyanxi/p/12469305.html
Copyright © 2020-2023  润新知