! !转载麻烦先通知本人,谢谢。
最近在设计一款产品,需要文章登录PHPWind,然而众所周知,PHPWind9(以下简称pw9)自身拥有安全策略,详情各位可以自己去PHPWind官方论坛看。安全策略的存在会导致即便站长关闭验证码策略依然在登陆时会显示验证码(前提是该用户重试太多次)。
要文章登录,并且不需要验证码,就得处理这个问题,然而官方并没有提供解决的方案,只能依赖自己处理。
首先要明白,PHPWind不像众多简单的php程序一般只是简单的该页面代码放置于对应文件中,每一次访问都会调用wekit.php,再由wekit调用插件,应用,服务。分析完毕后,我们就可以解决问题了。
登录,登录部分,在路径。\ \ src \程序\ u控制器下,从文件名不难认的出,LoginController.php就是用于登录的部分(这部分其实看着英文名来看就知道)
这时候我们贴出一段代码(后面我给备注了一些内容)
public function 运行(),{ $ this→setOutput ($ this→_showVerify(),“验证”);//验证码显示 $ this→setOutput(“用户登录”,,“标题”),,,,,,,,,,,,//设置页面标题 $ this→setOutput ($ this→_filterUrl(假),“url”); $ this→setOutput (PwUserHelper:: getLoginMessage (),“loginWay”); $ this→setOutput(演示了getInput(“邀请”)这个→美元,,“邀请”); $ this→setTemplate(“登录”); 风:进口(SRV: seo.bo.PwSeoBo); $ seoBo =, PwSeoBo: getInstance (); $ lang =,风:getComponent (i18n); seoBo→美元setCustomSeo(朗→美元getMessage (“SEO: u.login.run.title”), ", "); Wekit: setV (“seo”, seoBo美元); }
显而易见,首先我们需要屏蔽掉验证码显示部分。
将
$ this→setOutput ($ this→_showVerify(),“验证”);//验证码显示
修改成
//$ this→setOutput ($ this→_showVerify(),“验证”);//验证码显示
至此,我们完成了验证码显示的隐藏,但是到这一步你如果登录会发现,居然提示验证码错误,所以我们需要进一步修改,使得更像没有验证码,是的!我们要不论如何都返回验证码成功。
验证码属于服务部分(详情看官方文档),文件在。\ src \ \验证\ srv中服务,同样按照文件名可以分辨出PwVerifyService.php就是提供验证码服务的主要文件。
这时候我又贴出一段代码(机遇部分备注内容)
public function checkVerify (verifyType美元,美元code =, "), { return 真实; if (code 美元;==,”),,return 假;//如果验证码为空,返回验证码错误 $ types =, $ this→getVerifyType (); if (! array_key_exists (verifyType美元,美元类型)),return 假; 美元$ verify =,类型(verifyType美元); if (!收取($验证(“组件”)(“路径”))),return 假; $ obj =, Wekit:负载($验证(“组件”)(“路径”)); if (obj→美元checkVerify(代码)美元,===,true ), return 真实; return 假; }
这里我给个简单粗暴的,具体其他方法不多说,想研究自己深入即可。
public function checkVerify (verifyType美元,美元code =, "), { return 真实;,//直接返回真,返回验证码正确//if (code 美元;==,”),,return 假; $ types =, $ this→getVerifyType (); if (! array_key_exists (verifyType美元,美元类型)),return 假; 美元$ verify =,类型(verifyType美元); if (!收取($验证(“组件”)(“路径”))),return 假; $ obj =, Wekit:负载($验证(“组件”)(“路径”)); if (obj→美元checkVerify(代码)美元,===,true ), return 真实; return 假; }
至此,问题解决了,尽享丝滑吧。