Verify a 10-digit Indian mobile number with a one-time passcode.
@if (sms.busy) {
}
@if (!sms.destinationConfirmed) {
info What to expect
schedule OTP arrives within 30 seconds
verified Code is valid for 5 minutes
autorenew Resend available after 30 seconds
shield Your number is encrypted at rest
} @else if (!sms.verified) {
} @else {
check_circle
SMS OTP active
OTP will be sent to +91 {{ sms.destination }} on every sign-in.
power_settings_new Disable
}
}
@if (selectedMethod === 'email') {
Verify your email address with a one-time passcode.
@if (email.busy) {
}
@if (!email.destinationConfirmed) {
info What to expect
schedule Email arrives within 30 seconds
verified Code is valid for 10 minutes
folder Check spam / promotions folder
shield Your address is encrypted at rest
} @else if (!email.verified) {
} @else {
check_circle
Email OTP active
OTP will be sent to {{ email.destination }} on every sign-in.
power_settings_new Disable
}
}
@if (selectedMethod === 'totp') {
Generate a key, scan it in your authenticator app, then enter the 6-digit code to register this device.
@if (!totp.secret && !totp.verified) {
qr_code_scanner
No authenticator linked yet
Generate a setup key, scan it in your TOTP app, then verify the 6-digit code shown there.
auto_awesome Generate setup key
} @else if (totp.secret && !totp.verified) {
@for (row of totpQrCells; track $index) {
@for (cell of row; track $index) {
}
}
Scan in your authenticator app
1
Open Google Authenticator (or any TOTP app) and tap “Add account”.
2
Scan the code on the left, or enter the secret manually.
{{ totp.secret }}
content_copy
3
Enter the 6-digit code shown by your app to verify and register this device.
Authenticator code
= 48 && $event.charCode <= 57 ? true : $event.preventDefault()"
/>
@if (totp.errorMsg) {
{{ totp.errorMsg }}
}
verified {{ totp.busy ? 'Verifying…' : 'Verify & Register' }}
refresh Discard & restart
} @else {
check_circle
Authenticator app registered
Sign-in will require a 6-digit TOTP code from your app.
power_settings_new Unlink
}
}
@if (selectedMethod === 'hardware') {
Choose a device kind, then connect & register it.
@if (!selectedHwKind) {
@for (item of hardware; track item.kind) {
{{ item.icon }}
{{ item.title }}
{{ item.registered ? 'check_circle' : 'radio_button_unchecked' }}
{{ item.registered ? 'Registered' : 'Not Registered' }}
{{ item.description }}
@if (item.registered) {
tag {{ item.serial }}
schedule {{ item.registeredAt }}
}
{{ item.registered ? 'settings' : 'add' }}
{{ item.registered ? 'Manage' : 'Register' }}
}
} @else if (currentHwItem) {
arrow_back
Hardware Token
All devices
{{ currentHwItem.icon }}
@if (currentHwItem.busy) {
}
@if (currentHwItem.registered) {
check
}
{{ currentHwItem.title }}
{{ currentHwItem.registered ? 'check_circle' : 'cancel' }}
{{ currentHwItem.registered ? 'Registered' : currentHwItem.busy ? 'Detecting…' : 'Not Registered' }}
{{ currentHwItem.description }}
{{
currentHwItem.busy || currentHwItem.registered ? 'check_circle' : 'circle'
}}
Connect / insert the device
{{
currentHwItem.registered ? 'check_circle' : currentHwItem.busy ? 'autorenew' : 'circle'
}}
Detect & read serial number
{{ currentHwItem.registered ? 'check_circle' : 'circle' }}
Bind device to {{ username }}
@if (currentHwItem.registered) {
Serial
{{ currentHwItem.serial }}
Registered on
{{ currentHwItem.registeredAt }}
}
@if (!currentHwItem.registered) {
{{ currentHwItem.busy ? 'autorenew' : 'usb' }}
{{ currentHwItem.busy ? 'Detecting device…' : 'Connect & Register' }}
} @else {
link_off Unregister
}
}
}