pub struct Session<'s, T: Send + Sync + Clone + 'static> { /* private fields */ }Expand description
A request guard implementing FromRequest to retrive the session based on the cookie from the user.
Implementations§
Source§impl<'s, T: Send + Sync + Clone + 'static> Session<'s, T>
impl<'s, T: Send + Sync + Clone + 'static> Session<'s, T>
Sourcepub async fn get(&self) -> SessionResult<Option<T>>
pub async fn get(&self) -> SessionResult<Option<T>>
Get the session value from the store.
Returns None if there is no initialized session value or if the value has expired.
Sourcepub async fn set(&self, value: T) -> SessionResult<()>
pub async fn set(&self, value: T) -> SessionResult<()>
Sets the session value from the store.
This will refresh the expiration timer.
Sourcepub async fn touch(&self) -> SessionResult<()>
pub async fn touch(&self) -> SessionResult<()>
Refreshes the expiration timer on the sesion in the store.
Sourcepub async fn remove(&self) -> SessionResult<()>
pub async fn remove(&self) -> SessionResult<()>
Removes the session from the store.
Sourcepub async fn regenerate_token<'r>(&mut self) -> SessionResult<()>
pub async fn regenerate_token<'r>(&mut self) -> SessionResult<()>
Regenerates the session token. The fairing will automatically add a cookie to the response with the new token.
It is important to regenerate the session token after a user is authenticated in order to prevent session fixation attacks.
This also has a side effect of refreshing the expiration timer on the session.
§Examples
use rocket::{
http::private::cookie::CookieBuilder,
serde::{
Deserialize,
Serialize,
},
Build,
Rocket,
};
use rocket_session_store::{
memory::MemoryStore,
Session,
SessionError,
SessionStore,
};
#[macro_use]
extern crate rocket;
#[launch]
fn rocket() -> Rocket<Build> {
let session_store = SessionStore::<SessionState> {
store: Box::new(MemoryStore::new()),
name: "session".into(),
duration: std::time::Duration::from_secs(24 * 60 * 60),
cookie_builder: CookieBuilder::new("", ""),
};
rocket::build()
.attach(session_store.fairing())
.mount("/", routes![login])
}
#[post("/login")]
async fn login(mut session: Session<'_, SessionState>) -> Result<(), SessionError> {
// Authenticate the user (check password, 2fa, etc)
// ...
let user_id = Some(1);
// Important! Regenerate _before_ updating the session for the authenticated user. We don't
// want to run into a scenario where updating the session works, but then regenerating the
// token fails for some reason leaving the old session still valid with the user logged in
// (eg due to an intermittent redis connection issue or something).
session.regenerate_token().await?;
session.set(SessionState { user_id }).await?;
Ok(())
}
#[derive(Serialize, Deserialize, Clone, Copy)]
#[serde(crate = "rocket::serde")]
struct SessionState {
user_id: Option<u32>,
}Trait Implementations§
Source§impl<'r, 's, T> FromRequest<'r> for Session<'s, T>
impl<'r, 's, T> FromRequest<'r> for Session<'s, T>
Auto Trait Implementations§
impl<'s, T> Freeze for Session<'s, T>
impl<'s, T> !RefUnwindSafe for Session<'s, T>
impl<'s, T> Send for Session<'s, T>
impl<'s, T> Sync for Session<'s, T>
impl<'s, T> Unpin for Session<'s, T>
impl<'s, T> !UnwindSafe for Session<'s, T>
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
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> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
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> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);