Skip to main content

Auth

Struct Auth 

Source
pub struct Auth;
Expand description

Authentication facade

Provides Laravel-like static methods for authentication operations.

§Example

use ferro_rs::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 id_as<T>() -> Option<T>
where T: TryFrom<i64>,

Get the authenticated user’s ID as a specific type

Useful when your database uses i32 primary keys but Auth stores i64.

§Example
// SeaORM entities typically use i32 for primary keys
let user_id: i32 = Auth::id_as().expect("User must be 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 logout_other_devices() -> Option<Result<u64, FrameworkError>>

Log out all other sessions for the current user.

Destroys all sessions for the authenticated user except the current one. Use after password changes or security-sensitive operations.

Returns the number of destroyed sessions, or None if not authenticated.

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 ferro_rs::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 ferro_rs::Auth;
use ferro_rs::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 UnsafeUnpin 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> Chain<T> for T

Source§

fn len(&self) -> usize

The number of items that this chain link consists of.
Source§

fn append_to(self, v: &mut Vec<T>)

Append the elements in this link to the chain.
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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. 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