mirror of
https://github.com/actix/actix-extras.git
synced 2025-02-25 11:32:50 +01:00
Fix CI build errors
This commit is contained in:
parent
09221c1147
commit
7f4437b38d
@ -28,7 +28,7 @@ provided by `actix-session`; it takes care of all the session cookie handling an
|
|||||||
against the active [`Session`].
|
against the active [`Session`].
|
||||||
|
|
||||||
`actix-session` provides some built-in storage backends: ([`CookieSessionStore`],
|
`actix-session` provides some built-in storage backends: ([`CookieSessionStore`],
|
||||||
[`RedisSessionStore`], and [`RedisActorSessionStore`]) - you can create a custom storage backend
|
[`RedisSessionStore`], [`RedisActorSessionStore`], and [`DynamoDbSessionStore`]) - you can create a custom storage backend
|
||||||
by implementing the [`SessionStore`] trait.
|
by implementing the [`SessionStore`] trait.
|
||||||
|
|
||||||
Further reading on sessions:
|
Further reading on sessions:
|
||||||
@ -133,12 +133,22 @@ attached to your sessions. You can enable:
|
|||||||
actix-session = { version = "...", features = ["redis-rs-session", "redis-rs-tls-session"] }
|
actix-session = { version = "...", features = ["redis-rs-session", "redis-rs-tls-session"] }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- a DynamoDB-based backend via [`dynamo-db`](https://docs.rs/aws-sdk-dynamodb), [`DynamoDbSessionStore`], using
|
||||||
|
the `dynamo-db` feature flag.
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[dependencies]
|
||||||
|
# ...
|
||||||
|
actix-session = { version = "...", features = ["dynamo-db"] }
|
||||||
|
```
|
||||||
|
|
||||||
You can implement your own session storage backend using the [`SessionStore`] trait.
|
You can implement your own session storage backend using the [`SessionStore`] trait.
|
||||||
|
|
||||||
[`SessionStore`]: storage::SessionStore
|
[`SessionStore`]: storage::SessionStore
|
||||||
[`CookieSessionStore`]: storage::CookieSessionStore
|
[`CookieSessionStore`]: storage::CookieSessionStore
|
||||||
[`RedisSessionStore`]: storage::RedisSessionStore
|
[`RedisSessionStore`]: storage::RedisSessionStore
|
||||||
[`RedisActorSessionStore`]: storage::RedisActorSessionStore
|
[`RedisActorSessionStore`]: storage::RedisActorSessionStore
|
||||||
|
[`DynamoDbSessionStore`]: storage::DynamoDbSessionStore
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
|
@ -17,6 +17,52 @@ use crate::storage::{
|
|||||||
SessionStore,
|
SessionStore,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Use DynamoDB as session storage backend.
|
||||||
|
///
|
||||||
|
/// ```no_run
|
||||||
|
/// use actix_web::{web, App, HttpServer, HttpResponse, Error};
|
||||||
|
/// use actix_session::{SessionMiddleware, storage::DynamoDbSessionStore};
|
||||||
|
/// use actix_web::cookie::Key;
|
||||||
|
/// use aws_config::meta::region::RegionProviderChain;
|
||||||
|
/// use aws_config::Region;
|
||||||
|
/// use aws_config::default_provider::credentials::DefaultCredentialsChain;
|
||||||
|
/// use aws_sdk_dynamodb::config::ProvideCredentials;
|
||||||
|
/// use aws_sdk_dynamodb::Client;
|
||||||
|
///
|
||||||
|
///
|
||||||
|
/// // The secret key would usually be read from a configuration file/environment variables.
|
||||||
|
/// fn get_secret_key() -> Key {
|
||||||
|
/// # todo!()
|
||||||
|
/// // [...]
|
||||||
|
/// }
|
||||||
|
///
|
||||||
|
/// #[actix_web::main]
|
||||||
|
/// async fn main() -> std::io::Result<()> {
|
||||||
|
/// let secret_key = get_secret_key();
|
||||||
|
///
|
||||||
|
/// let dynamo_db_store = DynamoDbSessionStore::builder()
|
||||||
|
/// .table_name(String::from("MyTableName"))
|
||||||
|
/// .key_name("PK".to_string())
|
||||||
|
/// .build()
|
||||||
|
/// .await?;
|
||||||
|
///
|
||||||
|
/// HttpServer::new(move ||
|
||||||
|
/// App::new()
|
||||||
|
/// .wrap(SessionMiddleware::new(
|
||||||
|
/// dynamo_db_store.clone(),
|
||||||
|
/// secret_key.clone()
|
||||||
|
/// ))
|
||||||
|
/// .default_service(web::to(|| HttpResponse::Ok())))
|
||||||
|
/// .bind(("127.0.0.1", 8080))?
|
||||||
|
/// .run()
|
||||||
|
/// .await
|
||||||
|
/// }
|
||||||
|
/// ```
|
||||||
|
///
|
||||||
|
/// # Implementation notes
|
||||||
|
/// `DynamoDbSessionStore` leverages [`aws-sdk-dynamodb`] as a DynamoDB client.
|
||||||
|
///
|
||||||
|
/// [`aws-sdk-dynamodb`]: https://github.com/awslabs/aws-sdk-rust
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct DynamoDbSessionStore {
|
pub struct DynamoDbSessionStore {
|
||||||
configuration: CacheConfiguration,
|
configuration: CacheConfiguration,
|
||||||
@ -60,7 +106,7 @@ impl DynamoDbSessionStore {
|
|||||||
/// As a default, it expects a DynamoDB table name of 'sessions', with a single partition key of 'SessionId' this can be overridden using the [`DynamoDbSessionStoreBuilder`].
|
/// As a default, it expects a DynamoDB table name of 'sessions', with a single partition key of 'SessionId' this can be overridden using the [`DynamoDbSessionStoreBuilder`].
|
||||||
pub fn builder() -> DynamoDbSessionStoreBuilder {
|
pub fn builder() -> DynamoDbSessionStoreBuilder {
|
||||||
DynamoDbSessionStoreBuilder {
|
DynamoDbSessionStoreBuilder {
|
||||||
configuration: CacheConfiguration::default(),
|
configuration: CacheConfiguration::default()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -76,7 +122,7 @@ impl DynamoDbSessionStore {
|
|||||||
/// [`DynamoDbSessionStore`]: crate::storage::DynamoDbSessionStore
|
/// [`DynamoDbSessionStore`]: crate::storage::DynamoDbSessionStore
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub struct DynamoDbSessionStoreBuilder {
|
pub struct DynamoDbSessionStoreBuilder {
|
||||||
configuration: CacheConfiguration,
|
configuration: CacheConfiguration
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DynamoDbSessionStoreBuilder {
|
impl DynamoDbSessionStoreBuilder {
|
||||||
@ -99,6 +145,27 @@ impl DynamoDbSessionStoreBuilder {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Set the credentials to use for the DynamoDB client.
|
||||||
|
pub fn with_credentials(mut self, credentials: Credentials) -> Self {
|
||||||
|
self.configuration.credentials = Some(credentials);
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the SDK config to use for the DynamoDB client.
|
||||||
|
pub fn with_sdk_config(mut self, config: Config) -> Self {
|
||||||
|
self.configuration.sdk_config = Some(config);
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Set the region to use for the DynamoDB client.
|
||||||
|
pub fn with_region(mut self, region: Region) -> Self {
|
||||||
|
self.configuration.region = Some(region);
|
||||||
|
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Set the endpoint to use if using DynamoDB Local. Defaults to 'http://localhost:8000'.
|
/// Set the endpoint to use if using DynamoDB Local. Defaults to 'http://localhost:8000'.
|
||||||
pub fn dynamo_db_local_endpoint(mut self, dynamo_db_local_endpoint: String) -> Self {
|
pub fn dynamo_db_local_endpoint(mut self, dynamo_db_local_endpoint: String) -> Self {
|
||||||
self.configuration.dynamo_db_local_endpoint = dynamo_db_local_endpoint;
|
self.configuration.dynamo_db_local_endpoint = dynamo_db_local_endpoint;
|
||||||
|
@ -20,7 +20,7 @@ mod redis_rs;
|
|||||||
#[cfg(any(feature = "redis-actor-session", feature = "redis-rs-session"))]
|
#[cfg(any(feature = "redis-actor-session", feature = "redis-rs-session"))]
|
||||||
mod utils;
|
mod utils;
|
||||||
|
|
||||||
#[cfg(any(feature = "dynamo-db"))]
|
#[cfg(feature = "dynamo-db")]
|
||||||
mod dynamo_db;
|
mod dynamo_db;
|
||||||
|
|
||||||
#[cfg(feature = "cookie-session")]
|
#[cfg(feature = "cookie-session")]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user