enhance: Display TOTP Register URL

Close #7261

Co-Authored-By: tamaina <tamaina@hotmail.co.jp>
This commit is contained in:
syuilo 2022-05-14 15:00:15 +09:00
parent 493dc6836a
commit 36db202263
3 changed files with 9 additions and 5 deletions

View file

@ -1157,6 +1157,7 @@ _2fa:
registerKey: "キーを登録" registerKey: "キーを登録"
step1: "まず、{a}や{b}などの認証アプリをお使いのデバイスにインストールします。" step1: "まず、{a}や{b}などの認証アプリをお使いのデバイスにインストールします。"
step2: "次に、表示されているQRコードをアプリでスキャンします。" step2: "次に、表示されているQRコードをアプリでスキャンします。"
step2Url: "デスクトップアプリでは次のURLを入力します:"
step3: "アプリに表示されているトークンを入力して完了です。" step3: "アプリに表示されているトークンを入力して完了です。"
step4: "これからログインするときも、同じようにトークンを入力します。" step4: "これからログインするときも、同じようにトークンを入力します。"
securityKeyInfo: "FIDO2をサポートするハードウェアセキュリティキーもしくは端末の指紋認証やPINを使用してログインするように設定できます。" securityKeyInfo: "FIDO2をサポートするハードウェアセキュリティキーもしくは端末の指紋認証やPINを使用してログインするように設定できます。"

View file

@ -2,8 +2,8 @@ import bcrypt from 'bcryptjs';
import * as speakeasy from 'speakeasy'; import * as speakeasy from 'speakeasy';
import * as QRCode from 'qrcode'; import * as QRCode from 'qrcode';
import config from '@/config/index.js'; import config from '@/config/index.js';
import define from '../../../define.js';
import { UserProfiles } from '@/models/index.js'; import { UserProfiles } from '@/models/index.js';
import define from '../../../define.js';
export const meta = { export const meta = {
requireCredential: true, requireCredential: true,
@ -40,15 +40,17 @@ export default define(meta, paramDef, async (ps, user) => {
}); });
// Get the data URL of the authenticator URL // Get the data URL of the authenticator URL
const dataUrl = await QRCode.toDataURL(speakeasy.otpauthURL({ const url = speakeasy.otpauthURL({
secret: secret.base32, secret: secret.base32,
encoding: 'base32', encoding: 'base32',
label: user.username, label: user.username,
issuer: config.host, issuer: config.host,
})); });
const dataUrl = await QRCode.toDataURL(url);
return { return {
qr: dataUrl, qr: dataUrl,
url,
secret: secret.base32, secret: secret.base32,
label: user.username, label: user.username,
issuer: config.host, issuer: config.host,

View file

@ -52,8 +52,9 @@
</template> </template>
</I18n> </I18n>
</li> </li>
<li>{{ i18n.ts._2fa.step2 }}<br><img :src="twoFactorData.qr"></li> <li>{{ i18n.ts._2fa.step2 }}<br><img :src="twoFactorData.qr"><p>{{ $ts._2fa.step2Url }}<br>{{ data.url }}</p></li>
<li>{{ i18n.ts._2fa.step3 }}<br> <li>
{{ i18n.ts._2fa.step3 }}<br>
<MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false"><template #label>{{ i18n.ts.token }}</template></MkInput> <MkInput v-model="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false"><template #label>{{ i18n.ts.token }}</template></MkInput>
<MkButton primary @click="submit">{{ i18n.ts.done }}</MkButton> <MkButton primary @click="submit">{{ i18n.ts.done }}</MkButton>
</li> </li>