美文网首页
php 邮件验证 图片验证 手机验证

php 邮件验证 图片验证 手机验证

作者: AnnaJIAN | 来源:发表于2018-11-20 12:29 被阅读0次

邮件验证逻辑

$token = Str::random(16);
Cache::set('email_verification_' . $notifiable->email, $token, 30);
$url = $urlString . '?email_verification_token=' . $token;
邮箱包含此链接。点击此链接发出get请求去完成校验。

1. 数据库检查验证字段是不是已经验证过了。
2. email token 是不是已经过期。
3. 是不是验证通过。
验证Cache::get('email_verification_' . $notifiable->email) === $request->email_verification_token

图片与手机验证的逻辑

通常情况下的流程
手机号输入和图片验证输入在同一个界面。验证图片&&手机号,然后发送短信,验证短信。
每个初始化form有一个随机的token,session记录初始化captcha_code。

//表单初始化页面
// when loading, render token in form.
session_start();
$render_token = md5(random(15));
$_SESSION['captcha'][$render_token] = $captchaAPI->getPhrase();

//请求校验函数
// when submit
// avoid repeat submit
if ($_SESSION['token'] === $request->render_token) {
      throw new Exception('Can\'t submit twice');
}
session_start();
if (!$_SESSION['token']) {
    $_SESSION['token'] = $request->render_token;
}

if ($_SESSION['captcha'][$request->render_token] === $request->captcha_code && available($phone)) {
      unset($_SESSION['captcha']);
      unset($_SESSION['token']);
      // 生成手机code保存到cache,发送手机短信, 进行短信验证码验证
}

提交之后request token get code与此request code比较?

分步验证流程:

  1. 填写手机号,提交。获得图片验证码的图片,并且cache存了captcha_code。return captcha_key。
  2. 填写图片验证码,提交。request 提交输入的code和captcha_key,通过captcha_key获取captcha_code然后和code比较。成功的话发送短信,并在cache中用phone_cache_token保存短信验证码phone_code, return phone_cache_token;
  3. 填写手机收到的短信码,通过phone_cache_token获得phone_code与提交的code比较,成功则登录。

图片验证逻辑

生成图片验证码,需要以手机号作为参数
Web 版本 https://github.com/mewebstudio/captcha
API 版本 https://github.com/Gregwar/Captcha

//调用之前正则检查国内的手机号
// /^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\d{8}$/
$key='captcha_' . random(15); 
\Cache::put($key, ['phone' => $request->phone, 'captcha_code' => $captchaAPI->getPhrase()], $expiredAt);

return $res[
    'captcha_key' => $key,
    'captcha_image_content' => $captchaAPI->inline()
];

校验:
$imageCache = \Cache::get($requestResponse['captcha_key']);
$request->captcha_code == $imageCache['captcha_code'];

短信验证逻辑

在图片验证码验证成功之后,进行短信验证

// 生成4位随机数,左侧补0, cache 保存
$code = str_pad(random_int(1, 9999), 4, 0, STR_PAD_LEFT);
$phone_cache_token = 'verificationCode_' . str_random(15);
$expiredAt = now()->addMinutes(10);
\Cache::put($phone_cache_token, ['code' => $code], $expiredAt);

// 调用手机短信API,把code发到手机
try {
      $result = $easySms->send($phone, [
           'content'  =>  "【Lbbs社区】您的验证码是{$code}。如非    本人操作,请忽略本短信"
       ]);
} catch (\Exception $e) {
      log('logfile.log', $e->getMessage());
}
return $res['verification_key' => $phone_cache_token, 'phone' => $phone];

$verifyData = \Cache::get($res['verification_key']);
校验:
//防止时序攻击的字符串比较
hash_equals($verifyData['code'], $request->verification_code)

Q:
提供API的服务商把cache存在本机上,如果访问量大的话,本机的cache文件会很大吗?

相关文章

  • php 邮件验证 图片验证 手机验证

    邮件验证逻辑 图片与手机验证的逻辑 通常情况下的流程手机号输入和图片验证输入在同一个界面。验证图片&&手机号,然后...

  • 验证码类

    验证码类 captcha.class.php 生成验证码图片,验证码存入session imagecode.php...

  • PHP中的一些验证:

    PHP中的一些验证:验证是不是手机号: 验证是不是固话: php中判断这个手机号是否是正确的: php中判断是不是数字:

  • PHP项目图片验证码不显示

    PHP项目图片验证码不显示 在PHP项目中图片及图片验证码不显示,是由于PHP没有安装gd扩展库,无法正常显示图片...

  • PHP之验证码制作

    php实现字母验证码 php通过session存储验证信息 验证码通过表单提交、校验 使用js实现动态校验验证码

  • 短信验证

    一、短信验证 验证方式有很多种:短信验证码,邮箱验证,语音验证,图片验证等等。其中短信验证,语音验证,邮箱验证都是...

  • PHP使用GD库生成验证码图片,实现图片验证

    本文记录从php 下载配置GD图片生成库 到使用该库生成验证码图片,网页上实现验证码。使用技术:php使用GD库绘...

  • element表单验证

    一、普通验证、数字验证、手机号验证、邮箱验证:

  • thinkphp3.2 图片验证码教程

    thinkphp框架自带了验证码的功能,利用手册可以轻松做出图片验证码html php 生成的验证码信息会保存到s...

  • NPM验证邮件,手机接受验证时出现service unavail

    NPM验证邮件,手机接受验证时出现service unavailable 博客说明 文章所涉及的资料来自互联网整理...

网友评论

      本文标题:php 邮件验证 图片验证 手机验证

      本文链接:https://www.haomeiwen.com/subject/tomhfqtx.html