Browse Source

Do not fail login when push device registration fails

register_push_device() runs on re-authentication of an existing device
in authenticated_response(). Its error was propagated with `?`, so a
failure talking to the push relay/identity server (e.g. an undecodable
response in get_auth_api_token(), "Unexpected push token received from
bitwarden server") turned a successful authentication into a 400 Bad
Request on POST /identity/connect/token.

Handle the registration best-effort instead: log the error and continue,
mirroring the new-device login email handling a few lines above. The
device is still saved afterwards, and a re-login no longer fails when the
push relay/identity endpoint misbehaves.

Fixes #7371
pull/7378/head
max 4 weeks ago
parent
commit
9351e91de0
  1. 7
      src/api/identity.rs

7
src/api/identity.rs

@ -493,7 +493,12 @@ async fn authenticated_response(
// register push device
if !device.is_new() {
register_push_device(device, conn).await?;
// Registering the device for push is best-effort: a failure talking to the
// push relay/identity server must not turn a successful authentication into
// an error (see #7371). This mirrors the new-device email handling above.
if let Err(e) = register_push_device(device, conn).await {
error!("An error occurred while registering the device for push notifications: {e}");
}
}
// Save to update `device.updated_at` to track usage and toggle new status

Loading…
Cancel
Save