Fix throwing unhandled promise rejection if user doesn't exist in validatePasswordRedirect user to /profile on successful login

merge-requests/6/head
knotteye 4 years ago
parent be38b873eb
commit 8c17149f39
  1. 8
      src/database.ts
  2. 11
      templates/login.njk

@ -45,8 +45,12 @@ async function query(query: string){
}
async function validatePassword(username: string, password: string){
let pass: any = await query('select password_hash from users where username='+raw.escape(username)+' limit 1');
return await bcrypt.compare(password, pass[0].password_hash.toString());
try {
let pass: any = await query('select password_hash from users where username='+raw.escape(username)+' limit 1');
return await bcrypt.compare(password, pass[0].password_hash.toString());
} catch(e) {
return false;
}
}
async function hash(pwd){

@ -3,8 +3,15 @@
<h3>Log in to {{ sitename }}</h3><span style="font-size: small;">Not registered yet? Sign up <a href="/register">here</a>.</br></br></span>
<form action="/api/login" method="POST" target="responseFrame">
Username: </br><input type="text" name="username" style="min-width: 300px" placeholder="e.g. lain"/></br>
Password: </br><input type="password" name="password" style="min-width: 300px"/></br>
Password: </br><input type="password" name="password" style="min-width: 300px"/></br></br>
<input type="submit" value="Submit">
</form>
<iframe name="responseFrame" border="0" frameborder="0" style="display: inline;"></iframe>
<script type="text/javascript">
function handleLoad() {
var r = JSON.parse(document.getElementById('responseFrame').contentDocument.documentElement.textContent).success
if (typeof(r) !== 'undefined') window.location.href = '/profile'
}
</script>
<iframe name="responseFrame" onload="handleLoad()" border="0" frameborder="0" style="display: inline;" id="responseFrame">
</iframe>
{% endblock %}