200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Laravel后端接口使用mews/captcha验证码注册+登录流程讲解

Laravel后端接口使用mews/captcha验证码注册+登录流程讲解

时间:2018-11-25 01:51:20

相关推荐

Laravel后端接口使用mews/captcha验证码注册+登录流程讲解

大致的流程讲解:

注册流程:

获取图形验证码并正确填写->请求注册验证短信->填写注册的用户信息+短信验证码->用户注册成功

登录流程:

前端请求短信->已注册用户:返回登录的验证短信->用户登录成功

前端请求短信->未注册用户:提示用户注册

本文主要讲解后端laravel代码的实现注册的流程,登录流程比较简单,不去具体讨论,结合具体业务进行操作

1、安装 mews/captcha

官方仓库地址:

GitHub - mewebstudio/captcha: Captcha for Laravel 5 & 6

安装依赖并注册组件,比较简单,参考官方文档

composer require mews/captcha

在 config/app.php文件中注册服务提供者和别名(laravel5.1以上版本)

'providers' => [// ...Mews\Captcha\CaptchaServiceProvider::class,],'aliases' => [// ...'Captcha' => Mews\Captcha\Facades\Captcha::class,]

生成配置文件

php artisan vendor:publish

编辑生成的config/captcha.php

'flat' => ['length' => 4,'width' => 160,'height' => 46,'quality' => 90,'lines' => 6,'bgImage' => false,'bgColor' => '#ecf2f4','fontColors' => ['#2c3e50', '#c0392b', '#16a085', '#c0392b', '#8e44ad', '#303f9f', '#f57c00', '#795548'],'contrast' => -5,]

2、编写图形验证码接口

/*** 获取图形验证码* @return JsonResponse*/public function captcha(){$data = ['url' => app('captcha')->create('flat', true)];return response()->json(['status' => 200,'message' => 'success','data' => $data,]);}

返回值,key为验证的密钥,img为验证码图片(Base64格式)

{"status": 200,"message": "success","data": {"url": {"sensitive": false,"key": "$2y$10$pAStUZM.srOy2kwJbqLFl.BNaPsjg71BZtj3BQ4K6HHsvtO6Cb0HW","img": "data:image/png;base64,iVBORw……………………dw8P6Vb6JW4RcBb6FH8P88iH8kQmCC"}}}

3、注册短信验证码获取接口

在正确填写图片验证码之后,用户就可以获取到注册需要的短信验证码,发送短信前需要验证方法。

/*** 获取注册短信验证码* @param Request $request* @param SmsService $service 注入短信验证码服务* @return JsonResponse* @throws ApiException*/public function getVerifyCode_register(Request $request,SmsService $service){ $validator = Validator::make($request->toArray(), ['account' => 'required|regex:/^1[345789][0-9]{9}$/','captcha' => 'required','key' => 'required'], ['account.required' => '手机号码必填','account.regex' => '手机号码错误','captcha.required' => '图形验证码必填!','key.required' => 'Key必填!']);if ($validator->fails()) {//抛出自定义异常,返回错误结果到前端throw new ApiException($validator->errors()->first(),400);}//检测验证码是否匹配$rules = ['captcha' => 'required|captcha_api:'. request('key') . ',default'];$validator = Validator::make(request()->all(), $rules);if ($validator->fails()) {throw new ApiException('error','验证码不匹配!',400);} else {//查询是否已经注册$find_user = Member::where('mobile', $request['mobile'])->first();if ($find_user) {throw new ApiException('error','手机号已被注册,请登陆!',400);}//将短信验证码服务封装到service中,方便在不同的业务中调用if ($sms->sendSMS(request('mobile'),$request['type']) == 'success') {return response()->json(['code' => 200,'message' => '短信验证码发送成功!']);}}}

4、用户注册信息接口

/*** 会员注册* @param Request $request* @param SmsService $service* @return JsonResponse* @throws ApiException*/public function register(Request $request, SmsService $service){$validator = Validator::make($request->toArray(), ['account' => 'required|regex:/^1[345789][0-9]{9}$/','sms_code' => 'required|numeric','company_name' => 'required','name' => 'required'], ['company_name.required' => '公司名称必填','name.required' => '用户姓名必填','account.required' => '手机号必填','account.regex' => '手机号格式不正确','sms_code.required' => '短信验证码必填','sms_code.numeric' => '短信验证码是数字']);if ($validator->fails()) {throw new ApiException($validator->errors()->first(),400);}//查询是否已经注册$find_user = DB::table(Member::TABLE)->where('account', $request['account'])->first();if ($find_user) {throw new ApiException('手机号已被注册');}//验证短信验证码$redis_key = $service->smsCodeRedisKey($request['account']);$redis_sms_code = Redis::connection('verify_code')->get($redis_key);if ($request['sms_code'] != $redis_sms_code) {throw new ApiException('验证码错误');}// 验证通过--删除短信验证码Redis::connection('verify_code')->del([$redis_key]);//生成用户Token$member_token = $this->createMemberToken($request['account']);// 保存会员信息$ret = DB::table(Member::TABLE)->insertGetId(['account' => $request['account'],'member_token' => $member_token,'company_name' => $request['company_name'],'name' => $request['name'],'last_login_time' => date('Y-m-d H:i:s'),'created_at' => date('Y-m-d H:i:s'),'updated_at' => date('Y-m-d H:i:s')]);if (!$ret) {throw new ApiException('注册失败,请重试');}//注册成功之后直接返回登录的token给前端return response()->json(['status' => 200,'message' => '注册成功','data' => ['account' => $request['account'],'member_token' => $member_token]]);}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。