6

これがqrコードを生成する際の私のコードです

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;
}

おそらく、これによりqrコードが生成されますが、実際に生成されます。しかし、Google認証アプリを使用してこのコードをスキャンすると、エラーが発生します

The barcode 'otpauth://totp/user4@noemail.com&secret=UOPKN6QFW3J6PW74' is not a valid authentication barcode.

しかし、秘密鍵を使用して「手動で入力」すると機能し、生成された鍵を使用して問題なくログインできます。

インターネットで、データを urlencode する必要があると言っているのを見つけましたが、それでも機能しません。

上記の関数によって生成されたサンプル URL は次のとおりです。

https://chart.googleapis.com/chart?chs=200x200&chld=M%70&cht=qr&chl=otpauth://totp/user4@noemail.com%26secret=UOPKN6QFW3J6PW74

私は何かを見逃していますか、それとも何か間違っていましたか?

4

4 に答える 4

9

Google と IOS Authenticator アプリの両方が、OTP QR コードの「アカウント名」にスペースが含まれないようです。それらを - または _ のようなものに置き換えるか、それらを削除します。

Windows Phone アプリではスペースが許可され、6 か月前に Android Phone にインストールしたバージョンが機能しました。IOS をテストする機会がありませんでしたが、IOS に問題があるようです。キーを手動で入力しても問題なく機能しますが、スペースを含む QR コードをスキャンすることはできません。

于 2016-12-07T11:44:38.087 に答える
9

に置き換えるだけです(URLエンコード&secret=?secret=忘れないでください)。

また、これが当てはまるかどうかはわかりませんが、アカウント名にスペースを含めることはできません. Android でスキャンする場合は機能しますが、iPhone では機能しません (図を参照してください)。

于 2015-01-22T09:24:45.410 に答える
2

チャート API に渡すデータは完全にURL エンコードする必要があります。

otpauth%3A%2F%2Ftotp%2Fuser4%40noemail.com%26secret%3DUOPKN6QFW3J6PW74

これにより、データが適切にエンコードされていることが保証されます。

于 2014-06-18T09:19:20.973 に答える
1

QR コード URL のスペースを %20 に置き換えます。この問題は、Google Authenticator iOS アプリでのみ発生します。Android では、スペースを置き換えずに機能します。

于 2017-01-06T08:59:45.703 に答える