Laravel5.5 如何快速配置 Ding Api

安装以及配置步骤

1、安装一个larave项目
 
       (1) composer create-project laravel/laravel project-name --prefer-dist "5.5.*"
       
       (2)  修改config目录下的app.php
            'timezone' => 'Asia/Shanghai',
            'locale' => 'zh-CN'  
                            
2、Dingo + Jwt 安装以及配置步骤
 
     (1) composer.json 引入包,执行composer update
           "require": {
              ...
             "dingo/api": "2.0.*@dev",
            "tymon/jwt-auth": "dev-develop"
         },
       或者分别执行以下两条命令:
          1: composer require dingo/api "2.0.*@dev"
          2: composer require tymon/jwt-auth "dev-develop"
          
      (2) 在目录config的app.php下
         "providers"=>[
               ...
             Dingo\Api\Provider\LaravelServiceProvider::class,
            Tymon\JWTAuth\Providers\LaravelServiceProvider::class,
        ],    
        'aliases' => [
          ...
          'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class,
          'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class
       ]
       
      (3)  执行下面两个语句自动生成 dingo 和 jwt 的配置文件
            php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
            php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"
       
      (4)  打开.env文件,把dingo的配置放到最后面
            API_STANDARDS_TREE=vnd      # 环境 
      		API_SUBTYPE=myapp          # 子类型
      		API_PREFIX=api            #前缀
      		API_VERSION=v1           # 版本 
     		API_NAME="Dingo API"    # 名字(使用API Blueprint命令才会用到)
     		API_STRICT=false       # Strict模式
    		API_DEFAULT_FORMAT=json # 响应格式
            API_DEBUG=false        # 调试模式
            
      (5)  生成 Jwt 密钥
           php artisan jwt:secret 
           
      (6)  在目录config的api.php下
          'auth' => [
              'jwt' => Dingo\Api\Auth\Provider\JWT::class
          ]    
          
3、接下来就可以开始使用了
 
      (1)  创建 api 路由
          在router/api下新建如下内容
          $api = app('Dingo\Api\Routing\Router');
          $api->version('v1', function ($api) {
               $api->group(['namespace' => 'App\Http\Controllers\Api\V1'], function ($api) {
                   // 用户注册登录
                  $api->post('login', 'AuthController@login');
                  $api->post('register', 'AuthController@register');
                  // 所有的需要接口验证从这里开始
                  $api->group(['middleware' => 'jwt.auth'], function ($api) {
                     //用户基本信息
                     $api->get('me', 'UserController@index');
                  });
             });
        });
       
      (2)  创建 Users Model 
            <?php
             namespace App\Models;
			
			use Illuminate\Notifications\Notifiable;
			use Illuminate\Foundation\Auth\User as Authenticatable;
			use Tymon\JWTAuth\Contracts\JWTSubject;
			
			class Users extends Authenticatable implements JWTSubject
			{
			     use Notifiable;
		
			   /**
			     * The attributes that are mass assignable.
			    *
			   * @var array
			   */
			   protected $fillable = [
			        'username',
			        'email',
			       'password',
			  ];
			
			  /**
			   * @var array
			   */
			  protected $hidden = ['password','remember_token'];
			
			  /**
			   * @return mixed
			   */
			  public function getJWTIdentifier(){
			    return $this->getKey();
			  }
			
			  /**
			   * @return array
			   */
			  public function getJWTCustomClaims(){
			    return [];
			  }
	  }

    (3)创建注册登录实例
        <?php
          namespace App\Http\Controllers\Api\V1;
       
		  use App\Http\Controllers\Controller;
		  use App\Models\Users;
		  use Illuminate\Http\Request;
		  use Illuminate\Support\Facades\Hash;
		  use Illuminate\Support\Facades\Validator;
		  use Tymon\JWTAuth\Facades\JWTAuth;
		  use Tymon\JWTAuth\Exceptions\JWTException;
		  use Illuminate\Foundation\Auth\AuthenticatesUsers;

          /**
           * 登录注册
           * Class AuthController
           * @package App\Http\Controllers\Api\V1
           */
			class AuthController extends Controller
			{
			     use AuthenticatesUsers;
			     
			  /**
			   * 登录
			   * @return \Illuminate\Http\JsonResponse
			   */
			  public function login()
			  {
			    $credentials = app()->request->only('username', 'password');
			    $userRow = Users::where('username', app()->request->username)->first();
			    if (!$userRow) {
			         return $this->response->array([
                              'status_code' => 400,
                              'message' => '用户不存在',
                      ]);
			    }

			    if (!Hash::check(app()->request->password, $userRow->password)) {
			            return $this->response->array([
                              'status_code' => 400,
                              'message' => '密码不正确',
                      ]);
			    }
               try {
		           if (!$token = JWTAuth::attempt($credentials)) {
		                return $this->response->array([
                              'status_code' => 400,
                              'message' => '无效证件',
                      ]);
		           }
              } catch (JWTException $e) {
                        return $this->response->array([
                              'status_code' => 400,
                              'message' => '无法创建令牌',
                      ]);
              }

            return $this->response->array([
                         'token' => $token,
                         'status_code' => 200,
                         'message' => 'OK',
             ]);
         }

		  /**
		   * 用户注册
		   * @param Request $request
		   * @return mixed
		   */
		  public function register(Request $request)
		  {
		    $rules = [
		          'username' => ['required'],
		          'password' => ['required', 'min:6', 'max:20'],
		    ];
		
		    $param = $request->only('username', 'password');
		    $validator = Validator::make($param, $rules);
		
		    //验证用户
		    $isName = Users::where(['username' => $request->get('username')])->first();
		    if ($isName) {
		        return $this->response->array([
                         'status_code' => 400,
                         'message' => '用户名已被注册',
                 ]);
		    }
		
		    // 验证格式
		    if ($validator->fails()) {
		        return $this->response->array([
                         'status_code' => 400,
                         'message' => $validator->errors(),
                 ]);
		    }
		
		    // 创建用户
		    $insertUserResult = Users::create([
		           'username' => $request->get('username'),
		          'password' => bcrypt($request->get('password')),
		          'created_at' => date('Y-m-d H:i:s')
		    ]);
		
		    if (!$insertUserResult) {
		            return $this->response->array([
                         'status_code' => 400,
                         'message' => '注册失败',
                 ]);
		    }
		
		     return $this->response->array([
                         'status_code' => 200,
                         'message' =>'注册成功',
                 ]);
		  }
		}
		
      注意: 记得每次请求的接口的时候在Headers 头部带上 :  Authorization :Bearer + token
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值