这是我生成二维码的代码
public function getUrl($user, $hostname, $secret) {
$encoder = "https://chart.googleapis.com/chart?chs=200x200&chld=M%70&cht=qr&chl=";
$encoderURL = sprintf( "%sotpauth://totp/%s@%s",$encoder, $user, $hostname);
$finalEncodorURL = $encoderURL . "%26secret=". urlencode($secret);
return $finalEncodorURL;
}
据说这会生成一个二维码,它确实会生成。但是当我使用 google authenticator app 扫描这段代码时,它会产生一个错误
The barcode 'otpauth://totp/user4@noemail.com&secret=UOPKN6QFW3J6PW74' is not a valid authentication barcode.
但是当使用 key “手动输入”时,它会起作用,我可以使用生成的 key 正常登录。
我在互联网上发现一些东西说我应该对数据进行 urlencode,我做到了,但它仍然不起作用。
下面是上述函数生成的示例 url:
https://chart.googleapis.com/chart?chs=200x200&chld=M%70&cht=qr&chl=otpauth://totp/user4@noemail.com%26secret=UOPKN6QFW3J6PW74
我是不是遗漏了什么或做错了什么?
最佳答案
只需将 &secret=
替换为 ?secret=
(不要忘记进行 url 编码)。
另外我不知道这里是不是这种情况,但是帐户名不能有空格。如果您使用 Android 进行扫描,但使用 iPhone 则不行(想想吧!)
关于php - Google 身份验证器扫描时条形码无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259449/