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

邮件验证逻辑

$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文件会很大吗?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353