Auth

Struct Auth 

Source
pub struct Auth;
Expand description

Authentication facade

Provides Laravel-like static methods for authentication operations.

§Example

use kit::Auth;

// Check if authenticated
if Auth::check() {
    let user_id = Auth::id().unwrap();
}

// Log in
Auth::login(user_id);

// Log out
Auth::logout();

Implementations§

Source§

impl Auth

Source

pub fn id() -> Option<i64>

Get the authenticated user’s ID

Returns None if not authenticated.

Source

pub fn check() -> bool

Check if a user is currently authenticated

Source

pub fn guest() -> bool

Check if the current user is a guest (not authenticated)

Source

pub fn login(user_id: i64)

Log in a user by their ID

This sets the user ID in the session, making them authenticated.

§Security

This method regenerates the session ID to prevent session fixation attacks.

Source

pub fn login_remember(user_id: i64, _remember_token: &str)

Log in a user with “remember me” functionality

This extends the session lifetime for persistent login.

§Arguments
  • user_id - The user’s ID
  • remember_token - A secure token for remember me cookie
Source

pub fn logout()

Log out the current user

Clears the authenticated user from the session.

§Security

This regenerates the CSRF token to prevent any cached tokens from being reused.

Source

pub fn logout_and_invalidate()

Log out and invalidate the entire session

Use this for complete session destruction (e.g., “logout everywhere”).

Source

pub async fn attempt<F, Fut>( validator: F, ) -> Result<Option<i64>, FrameworkError>
where F: FnOnce() -> Fut, Fut: Future<Output = Result<Option<i64>, FrameworkError>>,

Attempt to authenticate with a validator function

The validator function should return the user ID if credentials are valid.

§Example
let user_id = Auth::attempt(async {
    // Validate credentials
    let user = User::find_by_email(&email).await?;
    if user.verify_password(&password)? {
        Ok(Some(user.id))
    } else {
        Ok(None)
    }
}).await?;

if let Some(id) = user_id {
    // Authentication successful
}
Source

pub async fn validate<F, Fut>(validator: F) -> Result<bool, FrameworkError>
where F: FnOnce() -> Fut, Fut: Future<Output = Result<bool, FrameworkError>>,

Validate credentials without logging in

Useful for password confirmation dialogs.

Source

pub async fn user() -> Result<Option<Arc<dyn Authenticatable>>, FrameworkError>

Get the currently authenticated user

Returns None if not authenticated or if no UserProvider is registered.

§Example
use kit::Auth;

if let Some(user) = Auth::user().await? {
    println!("Logged in as user {}", user.auth_identifier());
}
§Errors

Returns an error if no UserProvider is registered in the container. Make sure to register a UserProvider in your bootstrap.rs:

bind!(dyn UserProvider, DatabaseUserProvider);
Source

pub async fn user_as<T: Authenticatable + Clone>() -> Result<Option<T>, FrameworkError>

Get the authenticated user, cast to a concrete type

This is a convenience method that retrieves the user and downcasts it to your concrete User type.

§Example
use kit::Auth;
use crate::models::users::User;

if let Some(user) = Auth::user_as::<User>().await? {
    println!("Welcome, user #{}!", user.id);
}
§Type Parameters
  • T - The concrete user type that implements Authenticatable and Clone

Auto Trait Implementations§

§

impl Freeze for Auth

§

impl RefUnwindSafe for Auth

§

impl Send for Auth

§

impl Sync for Auth

§

impl Unpin for Auth

§

impl UnwindSafe for Auth

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more