feat: add logout endpoint
This commit is contained in:
parent
38aab46534
commit
60f0219e85
2 changed files with 33 additions and 0 deletions
31
src/api/v1/auth/logout.rs
Normal file
31
src/api/v1/auth/logout.rs
Normal file
|
@ -0,0 +1,31 @@
|
|||
use actix_web::{HttpRequest, HttpResponse, post, web};
|
||||
use diesel::{ExpressionMethods, delete};
|
||||
use diesel_async::RunQueryDsl;
|
||||
|
||||
use crate::{
|
||||
Data,
|
||||
error::Error,
|
||||
schema::refresh_tokens::{self, dsl},
|
||||
};
|
||||
|
||||
// TODO: Should maybe be a delete request?
|
||||
#[post("/logout")]
|
||||
pub async fn res(
|
||||
req: HttpRequest,
|
||||
data: web::Data<Data>,
|
||||
) -> Result<HttpResponse, Error> {
|
||||
let mut refresh_token_cookie = req.cookie("refresh_token").ok_or(Error::Unauthorized("request has no refresh token".to_string()))?;
|
||||
|
||||
let refresh_token = String::from(refresh_token_cookie.value());
|
||||
|
||||
let mut conn = data.pool.get().await?;
|
||||
|
||||
delete(refresh_tokens::table)
|
||||
.filter(dsl::token.eq(refresh_token))
|
||||
.execute(&mut conn)
|
||||
.await?;
|
||||
|
||||
refresh_token_cookie.make_removal();
|
||||
|
||||
Ok(HttpResponse::Ok().cookie(refresh_token_cookie).finish())
|
||||
}
|
|
@ -9,6 +9,7 @@ use uuid::Uuid;
|
|||
use crate::{Conn, error::Error, schema::access_tokens::dsl};
|
||||
|
||||
mod login;
|
||||
mod logout;
|
||||
mod refresh;
|
||||
mod register;
|
||||
mod reset_password;
|
||||
|
@ -24,6 +25,7 @@ pub fn web() -> Scope {
|
|||
web::scope("/auth")
|
||||
.service(register::res)
|
||||
.service(login::response)
|
||||
.service(logout::res)
|
||||
.service(refresh::res)
|
||||
.service(revoke::res)
|
||||
.service(verify_email::get)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue