pub struct LoginHistoryEntry {Show 13 fields
pub id: Option<i64>,
pub user_id: String,
pub timestamp: DateTime<Utc>,
pub auth_method: String,
pub ip_address: Option<String>,
pub user_agent: Option<String>,
pub success: bool,
pub credential_id: Option<String>,
pub provider: Option<String>,
pub provider_user_id: Option<String>,
pub failure_reason: Option<String>,
pub aaguid: Option<String>,
pub email: Option<String>,
}Expand description
A single login history entry
Fields§
§id: Option<i64>Database ID (auto-generated)
user_id: StringUser ID who logged in
timestamp: DateTime<Utc>Timestamp of the login attempt
auth_method: StringAuthentication method used (passkey/oauth2)
ip_address: Option<String>IP address of the client (may be None for privacy)
user_agent: Option<String>User-Agent header (truncated)
success: boolWhether the login was successful
credential_id: Option<String>Passkey credential ID (for passkey logins)
provider: Option<String>OAuth2 provider name (for OAuth2 logins)
provider_user_id: Option<String>OAuth2 provider user ID (for OAuth2 logins)
failure_reason: Option<String>Reason for failure (if success is false)
aaguid: Option<String>AAGUID of the authenticator (for passkey logins)
email: Option<String>Email address used for OAuth2 login
Trait Implementations§
Source§impl Clone for LoginHistoryEntry
impl Clone for LoginHistoryEntry
Source§fn clone(&self) -> LoginHistoryEntry
fn clone(&self) -> LoginHistoryEntry
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for LoginHistoryEntry
impl Debug for LoginHistoryEntry
Source§impl<'de> Deserialize<'de> for LoginHistoryEntry
impl<'de> Deserialize<'de> for LoginHistoryEntry
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl<'a, R: Row> FromRow<'a, R> for LoginHistoryEntrywhere
&'a str: ColumnIndex<R>,
Option<i64>: Decode<'a, R::Database> + Type<R::Database>,
String: Decode<'a, R::Database> + Type<R::Database>,
DateTime<Utc>: Decode<'a, R::Database> + Type<R::Database>,
Option<String>: Decode<'a, R::Database> + Type<R::Database>,
bool: Decode<'a, R::Database> + Type<R::Database>,
impl<'a, R: Row> FromRow<'a, R> for LoginHistoryEntrywhere
&'a str: ColumnIndex<R>,
Option<i64>: Decode<'a, R::Database> + Type<R::Database>,
String: Decode<'a, R::Database> + Type<R::Database>,
DateTime<Utc>: Decode<'a, R::Database> + Type<R::Database>,
Option<String>: Decode<'a, R::Database> + Type<R::Database>,
bool: Decode<'a, R::Database> + Type<R::Database>,
Auto Trait Implementations§
impl Freeze for LoginHistoryEntry
impl RefUnwindSafe for LoginHistoryEntry
impl Send for LoginHistoryEntry
impl Sync for LoginHistoryEntry
impl Unpin for LoginHistoryEntry
impl UnsafeUnpin for LoginHistoryEntry
impl UnwindSafe for LoginHistoryEntry
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
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>
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 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>
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