php代码有办法实现下面这种情况吗?
在页面上第一次提交用户名和密码,执行一条命令,触发二次验证,触发后,如果不填入验证码,执行那条命令的进程还在
第二次提交验证码,进入到第一次提交的进程,写入验证码,让第一次的进程继续执行
提交的页面如下:
以下我的这种写法是实现不了的,因为再执行一次的时候,exec执行的命令会重新发送一次验证码
public function save()
{
$account = trim(input('param.account'));
if (!$account) {
$this->error('账号不能为空');
exit;
}
$password = trim(input('param.password'));
if (!$password) {
$this->error('密码不能为空');
exit;
}
$code = trim(input('param.code'));
if (AppIdInfo::check($account)) {
$this->error('账号已存在');
exit;
}
$bundleId = "com.iosdeveloper.test" . gen_uuid();
if (!$code) {
exec("/usr/local/bin/fastlane login user:{$account} pwd:{$password} bundleid:{$bundleId}", $out, $status);
$out = implode(',', $out);
if (stripos('Please enter the 6 digit code', $out) !== false) {
$this->error('需要二次验证,请输入验证码');
exit;
}
} else {
$command = "/usr/local/bin/fastlane login user:{$account} pwd:{$password} bundleid:{$bundleId}";
$fp = @popen($command, "w");
@fputs($fp, $code);
@pclose($fp);
}
$this->success('添加成功!', '/admin/Appid/index');
}
以及这个命令直接在服务器上执行的情况:
如果只是你当前这个业务场景,换个思路,直接把这个业务逻辑拆成两部分就可以了,因为用户提交用户名和密码之后到第二次提交验证码之前,你后台也没有其它业务要运行,为啥希望这个进程一直存在呢?
第一次输入用户名和密码,通过用户名查询出来用户需要二次认证,返回需要二次认证的响应,同时看你想法,进程一结束.
页面收到需要二次认证的请求后,在密码下面加上验证码逻辑,请求二步认证的时候,把用户,密码,验证码 一起传回来,进行验证码和密码的校验.
密码的校验,看你需求,你可以在第一次请求的时候就验证密码是否通过,也可以像上面说的,放到第二步一起认证