implement basic passkey login flow
This commit is contained in:
parent
926afee5c5
commit
0a1da35d84
8 changed files with 150 additions and 96 deletions
|
@ -2,12 +2,53 @@
|
|||
|
||||
{% block title %}{{ gettext('Login') }}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% block script %}
|
||||
<script>
|
||||
const options_req = {{ options }};
|
||||
const token = "{{ token }}";
|
||||
const login_challenge = "{{ login_challenge }}";
|
||||
|
||||
{{ render_form(form) }}
|
||||
async function login() {
|
||||
const credential = await auth_passkey.sign_in(options_req);
|
||||
const response = await fetch("{{ url_for('.passkey_verify') }}", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
body: JSON.stringify({
|
||||
token,
|
||||
credential,
|
||||
login_challenge,
|
||||
}),
|
||||
})
|
||||
return await response.json()
|
||||
}
|
||||
|
||||
<a href="{{ url_for('.sign_up') }}" class="btn btn-primary">Sign Up</a>
|
||||
let form = document.getElementById('webauthn_register_form');
|
||||
|
||||
form.onsubmit = ev => {
|
||||
ev.preventDefault()
|
||||
login().then( response => {
|
||||
document.location = response.redirect;
|
||||
})
|
||||
};
|
||||
</script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="row">
|
||||
{{ render_form(form) }}
|
||||
</div>
|
||||
<div class="row">
|
||||
<form id="webauthn_register_form">
|
||||
<button class="btn btn-primary">Login wiht Passkey</button>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<a href="{{ url_for('.sign_up') }}" class="btn btn-secondary">Sign Up</a>
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue