pub struct AuthFlows { /* private fields */ }crypto and crate feature mailer and crate feature serde and non-WebAssembly only.Expand description
The auth flows. A middleware: app.wrap(auth), after (inside) FlashLayer
and CsrfLayer, which must see the pages it draws. See the module docs.
Implementations§
Source§impl AuthFlows
impl AuthFlows
Sourcepub fn new(
secret: &[u8],
base_url: &str,
store: impl UserStore + 'static,
mailer: impl Deliver + 'static,
) -> Self
pub fn new( secret: &[u8], base_url: &str, store: impl UserStore + 'static, mailer: impl Deliver + 'static, ) -> Self
secret signs sessions and links: at least 32 random bytes, the same
on every replica, kept out of the code. base_url (https://example.com)
starts the links in emails — never taken from the request’s Host.
§Panics
When secret is shorter than 32 bytes.
Sourcepub fn with_arcs(
secret: &[u8],
base_url: &str,
store: Arc<dyn UserStore>,
mailer: Arc<dyn Deliver>,
) -> Self
pub fn with_arcs( secret: &[u8], base_url: &str, store: Arc<dyn UserStore>, mailer: Arc<dyn Deliver>, ) -> Self
new with shared store and mailer.
Sourcepub fn require_confirmation(self, require: bool) -> Self
pub fn require_confirmation(self, require: bool) -> Self
Refuse to sign in an account until its email is confirmed (default: sign in at once; the confirmation email is sent either way).
Sourcepub fn min_password_length(self, n: usize) -> Self
pub fn min_password_length(self, n: usize) -> Self
The shortest password accepted (default 8).
Sourcepub fn session_ttl(self, ttl: Duration) -> Self
pub fn session_ttl(self, ttl: Duration) -> Self
How long a session lasts (default 30 days).
The session cookie’s name (default rws_auth).
Mark the session cookie Secure (default: when the base URL is https).
Sourcepub fn after_login(self, path: &str) -> Self
pub fn after_login(self, path: &str) -> Self
Where a form sign-in, sign-up or reset lands (default /).
Sourcepub fn after_logout(self, path: &str) -> Self
pub fn after_logout(self, path: &str) -> Self
Where a form sign-out lands (default /).
Sourcepub fn rate_limit(self, max: u32, window_secs: u64) -> Self
pub fn rate_limit(self, max: u32, window_secs: u64) -> Self
At most max sign-ins, sign-ups and email requests per client IP per
window_secs (default 10 a minute); max = 0 turns the limit off.
Sourcepub fn on_signup(self, hook: impl Fn(&AuthUser) + Send + Sync + 'static) -> Self
pub fn on_signup(self, hook: impl Fn(&AuthUser) + Send + Sync + 'static) -> Self
Call hook with each new account, after it’s created (a welcome
email, a default workspace). Runs on the request’s thread: enqueue
anything slow.
Sourcepub fn templates(self, engine: Arc<TeraEngine>) -> Self
Available on crate feature tera only.
pub fn templates(self, engine: Arc<TeraEngine>) -> Self
tera only.Render the pages from engine’s auth/login.html, auth/signup.html,
auth/forgot.html, auth/reset.html and the emails from
auth/mail/confirm.{txt,html}, auth/mail/reset.{txt,html} — each
that exists; the built-in ones otherwise (tera feature).
A session cookie for user (Set-Cookie value): sign someone in
from your own handler.
Sourcepub fn session_user(&self, request: &Request) -> Option<AuthUser>
pub fn session_user(&self, request: &Request) -> Option<AuthUser>
The account request’s session cookie belongs to — valid signature,
not expired, password unchanged since.
Trait Implementations§
Source§impl Middleware for AuthFlows
impl Middleware for AuthFlows
Source§fn is_passthrough(
&self,
request: &Request,
_connection: &ConnectionInfo,
) -> bool
fn is_passthrough( &self, request: &Request, _connection: &ConnectionInfo, ) -> bool
Nothing to check or strip: no cookie of ours, no identity headers, not a flow path. Async handlers then stay async.
fn handle( &self, request: &Request, connection: &ConnectionInfo, next: &dyn Application, ) -> Result<Response, String>
Source§fn layer_name(&self) -> &'static str
fn layer_name(&self) -> &'static str
Application::middleware_names): by default the type’s name
without its module path or generic parameters (CacheLayer). Since
18.28.0.Source§fn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
fn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
true when this layer’s own work for request never blocks (in-memory
state, atomics, short mutexes) — see Application::runs_inline. A
WithMiddleware stack runs inline only if every layer and the inner
application agree. Default false.Source§fn accepts_streamed_body(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool
fn accepts_streamed_body( &self, _request: &Request, _connection: &ConnectionInfo, ) -> bool
true when this layer never reads request.body, so the inner
application may receive it as a stream (Application::streams_body).
A layer that inspects the body (CSRF tokens in a form, request
signatures, rewriting) must keep the default false: it would see an
empty body.Source§fn answers_streamed_body(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool
fn answers_streamed_body( &self, _request: &Request, _connection: &ConnectionInfo, ) -> bool
true when this layer answers request itself — it doesn’t call
next — and reads its body as a stream (a proxy forwarding it as it
arrives). The body is then streamed whatever the layers after it and
the application would say. Requires accepts_streamed_body. Since
18.3.0.Auto Trait Implementations§
impl !RefUnwindSafe for AuthFlows
impl !UnwindSafe for AuthFlows
impl Forget for AuthFlows
impl Freeze for AuthFlows
impl Move for AuthFlows
impl Send for AuthFlows
impl Sync for AuthFlows
impl Unpin for AuthFlows
impl UnsafeUnpin for AuthFlows
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> ServiceExt for T
impl<T> ServiceExt for T
Source§fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>where
Self: Sized,
map-response-body only.Source§fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>where
Self: Sized,
trace only.Source§fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>where
Self: Sized,
trace only.