视频中作者把验证码直接放入了
laravel
自带的验证里面去了,
验证是在再带的login
方法里面处理
返回,刷新,并把原数据带回去
public function login(Request $request)
{
if (session('captcha') != $request->get('captcha')){
return redirect()->refresh()->withInput();
}
}
Laravel验证码工具gregwar/captcha
Ps:gregwar/captcha在Composer下载排行中长居第一名榜位。好用的工具大家都推荐,这个验证码工具作者本人也在很多项目中运用到了。给大家推荐的同时分享点经验。
一、安装方法
1.在项目根目录下执行:
composer require gregwar/captcha
2.在composer.json中添加:
"require": {
...
...
"gregwar/captcha": "1.*"
},
然后执行 composer update
这样安装就算完成了。
二、使用方法
1.命名空间引入
use Gregwar\Captcha\CaptchaBuilder; use Gregwar\Captcha\PhraseBuilder;
下面给大家一个完整的例子
路由定义(注意:该路由放在中间件外)
Route::get('/code/captcha/{tmp}', 'Admin\LoginController@captcha');
// 验证码生成
public function captcha($tmp)
{
$phrase = new PhraseBuilder;
// 设置验证码位数
$code = $phrase->build(6);
// 生成验证码图片的Builder对象,配置相应属性
$builder = new CaptchaBuilder($code, $phrase);
// 设置背景颜色
$builder->setBackgroundColor(220, 210, 230);
$builder->setMaxAngle(25);
$builder->setMaxBehindLines(0);
$builder->setMaxFrontLines(0);
// 可以设置图片宽高及字体
$builder->build($width = 100, $height = 40, $font = null);
// 获取验证码的内容
$phrase = $builder->getPhrase();
// 把内容存入session
\Session::flash('code', $phrase);
// 生成图片
header("Cache-Control: no-cache, must-revalidate");
header("Content-Type:image/jpeg");
$builder->output();
}
模版案例
<input name="captcha" type="text" placeholder="验证码">
<a onclick="javascript:re_captcha();">
![]({{ URL('/code/captcha/1') }})
</a>
Js点击换验证码
/***
此处url的规则是 /code/captcha/数字。我们可以在后面加一个随机参数,即可。后面的数字如果直接是小数,或者有小数,其实是找不到这个路由的
*/
<script type="text/javascript">
function re_captcha() {
$url = "{{ URL('/code/captcha') }}";
$url = $url + "/1?a=" + Math.random();
document.getElementById('127ddf0de5a04167a9e427d883690ff6').src = $url;
}
</script>
如何验证(由于是案例 我只做最基础的验证)
public function store(Request $request)
{
//
$data = \Input::all();
//验证码验证
if ($data['captcha'] != \Session::get('code')) {
return back()
->withErrors('验证码错误!');
}
执行登录的JS方法
//执行登录
function login(form){
//发送ajax实现数据的添加
$.ajax({
url:"/login",
type:"post",
dataType:"json",
async:true,
data:$(form).serialize(),
success:function(data){
if(data.id>0){
}else{
$("#error").css({"z-index":"100000","position":"absolute","top":"33%","left":"0","right":"0"});
$(".modal-body").html(data.info);
$("#error").show();
$(".btn-primary").click(function(){
$("#error").hide();
});
}
}
});
return false;
}
处理表单的store
public function store(Request $request)
{
$data = \Input::all();
if($data['captcha']!=\Session::get('code')){
return view("404")->with('info','验证码错误...')->with('url','/');
}
$res = $this->LoginStore->getAdminUser($data);
if(!$res){
return view("404")->with('info','账号不存在...')->with('url','/');
}
$password = md5($res->name.$data['pass']); //md5(name连接密码)
$md = substr_replace($password,$res->name,0,4);
$password = md5($md);
if(isset($res) && !empty($res)){
if($res->pass ==$password){
\Session::put('login',$res);
return redirect('/admin');
}else{
return view("404")->with('info','密码好像有错误...')->with('url','/');
}
}
return view("404")->with('info','帐号或密码不能为空...')->with('url','/');
}
添加测试数据的时候,可以用以下方法直接添加
Session::flash()
方法每次生成session
的时候,会把过去的session
销毁