Skip to content

Authentication

Larastvel provides JWT-based authentication with guards, policies, password reset, and email verification.

Auth Service

rust
// Login
let token = auth.attempt(email, password).await?;
// => Some("jwt-token-string")

// Authenticated user
let user = auth.user().await?;

// Logout
auth.logout(token).await?;

AuthenticatedUser Extractor

rust
async fn dashboard(AuthUser(user): AuthUser<User>) -> Html<String> {
    Html(format!("Welcome, {}!", user.name))
}

Auth Middleware

rust
router.get("/dashboard", dashboard)
    .middleware("auth");

Gates & Policies

rust
// Define a gate
Gate::define("update-post", |user: &User, post: &Post| {
    user.id == post.user_id
});

// Authorize in handler
gate.authorize("update-post", &post)?;

// Policy with CRUD methods
struct PostPolicy;
impl Policy<Post> for PostPolicy {
    fn view(user: &User, post: &Post) -> bool { /* ... */ }
    fn create(user: &User) -> bool { /* ... */ }
    fn update(user: &User, post: &Post) -> bool { /* ... */ }
    fn delete(user: &User, post: &Post) -> bool { /* ... */ }
}

// Before/after hooks
Gate::before(|user, ability| {
    if user.is_admin() { Some(true) } else { None }
});

Password Reset

rust
let broker = PasswordResetBroker::new(&db, &encrypter);
broker.send_reset_link(&user.email).await?;
broker.reset(token, email, new_password).await?;

Email Verification

rust
let broker = EmailVerificationBroker::new(&db, &encrypter);
broker.send_verification_email(&user).await?;
broker.verify(token).await?;
// Use VerifiedUser extractor for protected routes

Released under the MIT License.