This commit is contained in:
Phạm Minh Hoàng Nam 2026-04-12 21:15:38 +02:00 committed by GitHub
commit d533285bad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -131,7 +131,7 @@ async fn login(
login_result
}
// Return Status::Unauthorized to trigger logout
// Return an OAuth2-compliant invalid_grant error to trigger client logout on refresh failure
async fn _refresh_login(data: ConnectData, conn: &DbConn, ip: &ClientIp) -> JsonResult {
// Extract token
let refresh_token = match data.refresh_token {
@ -147,7 +147,20 @@ async fn _refresh_login(data: ConnectData, conn: &DbConn, ip: &ClientIp) -> Json
// let members = Membership::find_confirmed_by_user(&user.uuid, conn).await;
match auth::refresh_tokens(ip, &refresh_token, data.client_id, conn).await {
Err(err) => {
err_code!(format!("Unable to refresh login credentials: {}", err.message()), Status::Unauthorized.code)
// Return an OAuth2-compliant `invalid_grant` error response so that
// Bitwarden clients recognize the expired/invalid refresh token and
// prompt the user to re-authenticate. See: #7060
let msg = format!("Unable to refresh login credentials: {}", err.message());
error!("{msg}");
let result = json!({
"error": "invalid_grant",
"error_description": msg,
"ErrorModel": {
"Message": msg,
"Object": "error"
}
});
return Err(("invalid_grant", result).into());
}
Ok((mut device, auth_tokens)) => {
// Save to update `device.updated_at` to track usage and toggle new status