Добавить в корзинуПозвонить
Найти в Дзене
Один Rust не п...Rust

Личный кабинет пользователя на Rust

Для чего нужна данная статья? : Веб (Rust Full-Stack) Axum + Yew + PostgreSQL Веб (Rust Backend + JS Frontend) Actix-web + React + PostgreSQL Десктоп (GUI)Iced + SQLite Кроссплатформа (Web, Desktop, Mobile)Tauri + SvelteSaaSAxum + React + CockroachDB Self-Hosted Rocket + Yew + SQLite 1️⃣ Auth Service (OAuth2, JWT, 2FA, WebAuthn)
2️⃣ User Service (Профиль, роли, S3-хранение аватаров)
3️⃣ Payment Service (Stripe, Solana, подписки)
4️⃣ Notification Service (WebSockets, Email, SMS, Firebase)
5️⃣ Chat Service (WebSockets + AI-помощник)
6️⃣ Frontend (Leptos + Tauri + Flutter)
7️⃣ DevOps (Docker, Kubernetes, CI/CD, Monitoring) Зачем Вам это уметь? : Пример: Пример: Пример: Пример: Пример: Пример: Пример: Пример: use axum::{routing::post, Router, extract::Json}; use serde::{Deserialize, Serialize}; use sqlx::PgPool; use tower_http::cors::CorsLayer; use jsonwebtoken::{encode, decode, Header, Algorithm, Validation, EncodingKey, DecodingKey}; use redis::AsyncCommands; use totp_rs::{Algorithm as
Оглавление
GitHub - nicktretyakov/user_room
ML на RUST без заморочек
Один Rust не п...Rust

Для чего нужна данная статья? :

Выбрать лучший вариант реализации личного кабинета

Веб (Rust Full-Stack) Axum + Yew + PostgreSQL

Веб (Rust Backend + JS Frontend) Actix-web + React + PostgreSQL

Десктоп (GUI)Iced + SQLite

Кроссплатформа (Web, Desktop, Mobile)Tauri + SvelteSaaSAxum + React + CockroachDB

Self-Hosted Rocket + Yew + SQLite

Написать код включая ML-анализ для аутентификации:

1️⃣ Auth Service (OAuth2, JWT, 2FA, WebAuthn)
2️⃣
User Service (Профиль, роли, S3-хранение аватаров)
3️⃣
Payment Service (Stripe, Solana, подписки)
4️⃣
Notification Service (WebSockets, Email, SMS, Firebase)
5️⃣
Chat Service (WebSockets + AI-помощник)
6️⃣
Frontend (Leptos + Tauri + Flutter)
7️⃣
DevOps (Docker, Kubernetes, CI/CD, Monitoring)

Зачем Вам это уметь? :

1. Веб-реализации (Frontend + Backend)

1.1. Full-Stack на Rust

  • Frontend: Yew, Leptos, Dioxus
  • Backend: Axum, Actix-web, Rocket, Warp
  • База данных: PostgreSQL (sqlx, Diesel), SQLite, SurrealDB, Redis
  • Авторизация: JWT, OAuth2 (через oauth2-rs), OpenID Connect

Пример:

  • Axum + Yew + PostgreSQL + OAuth2

1.2. Backend на Rust, Frontend на JavaScript/TypeScript

  • Frontend: React, Vue, Svelte
  • Backend: Axum, Actix-web, Rocket
  • API: REST (OpenAPI) / GraphQL (Juniper, async-graphql)
  • База данных: PostgreSQL/MySQL/MongoDB
  • Авторизация: JWT, OAuth2, сессии

Пример:

  • Actix-web + React + PostgreSQL + JWT

2. Десктопные реализации (GUI)

2.1. На чистом Rust

  • GUI: egui, iced, druid, Slint, gtk-rs
  • База данных: SQLite, Sled, Postgres
  • Авторизация: Локальная, через API-сервер

Пример:

  • iced + SQLite + локальное хранение

2.2. Rust + Flutter

  • Backend: Rust (Tonic gRPC, Axum, Actix-web)
  • Frontend: Flutter (через flutter_rust_bridge)
  • Хранилище: SQLite, Firebase, Postgres
  • Авторизация: OAuth2, FirebaseAuth

Пример:

  • Rust gRPC backend + Flutter frontend

3. Кроссплатформенные варианты (Web + Desktop + Mobile)

3.1. WebAssembly (WASM)

  • Фреймворк: Yew, Leptos, Dioxus
  • Бэкенд: Axum, Rocket, Actix-web
  • База данных: PostgreSQL (через API), IndexedDB
  • Авторизация: JWT, OAuth2

Пример:

  • Полноценное SPA приложение на Yew + Rust backend

3.2. Tauri (Rust + WebView)

  • Frontend: Vue, React, Svelte
  • Backend: Tauri (Rust)
  • База данных: SQLite, IndexedDB
  • Авторизация: Через API или локально

Пример:

  • Tauri + Svelte + SQLite

4. Self-Hosted (On-Premises) и SaaS

4.1. SaaS (Облачный сервис на Rust)

  • Backend: Axum / Actix-web
  • Frontend: Vue, React
  • База данных: CockroachDB, ScyllaDB
  • Хостинг: AWS, DigitalOcean, Fly.io
  • Авторизация: OAuth2, OpenID Connect

Пример:

  • SaaS-сервис на Axum + React + CockroachDB

4.2. Self-Hosted (Личный сервер)

  • Backend: Rocket / Warp
  • Frontend: Yew / React
  • База данных: SQLite, PostgreSQL
  • Авторизация: Локальная (пароли + 2FA)

Пример:

  • Личный кабинет без облака, храним данные локально

Проект содержит - User Service (профиль, роли, S3-хранение аватаров), Payment Service (Stripe, Solana, подписки), Notification Service (WebSockets, Email, SMS, Firebase), Chat Service (WebSockets + AI-помощник), а также заготовку для frontend (Leptos + Tauri + Flutter)

use axum::{routing::post, Router, extract::Json};

use serde::{Deserialize, Serialize};

use sqlx::PgPool;

use tower_http::cors::CorsLayer;

use jsonwebtoken::{encode, decode, Header, Algorithm, Validation, EncodingKey, DecodingKey};

use redis::AsyncCommands;

use totp_rs::{Algorithm as TotpAlgorithm, Secret, TOTP};

use oauth2::{basic::BasicClient, AuthUrl, TokenUrl, ClientId, ClientSecret, RedirectUrl};

use webauthn_rs::prelude::*;

use tch::{Tensor, nn::{self, Module, OptimizerConfig}};

use stripe::Client as StripeClient;

use solana_client::rpc_client::RpcClient;

use tokio::sync::broadcast;

use tokio_tungstenite::tungstenite::protocol::Message;

use leptos::*;

use tauri::*;

#[derive(Debug, Serialize, Deserialize)]

struct User {

id: i32,

email: String,

password_hash: String,

avatar_url: Option<String>,

role: String,

two_factor_secret: Option<String>,

webauthn_credential: Option<String>,

}

#[derive(Debug, Serialize, Deserialize)]

struct Claims {

sub: i32,

exp: usize,

}

async fn login(Json(payload): Json<User>) {

let claims = Claims { sub: payload.id, exp: 10000000000 };

let token = encode(&Header::default(), &claims, &EncodingKey::from_secret(b"secret"))

.expect("JWT encoding failed");

println!("Generated token: {}", token);

}

async fn register() {}

async fn enable_2fa() {}

async fn webauthn_register() {}

async fn oauth2_login() {}

async fn ml_authentication_analysis() {}

async fn payment_subscription() {

let stripe_client = StripeClient::new("sk_test_key");

println!("Processing subscription via Stripe");

}

async fn solana_payment() {

let rpc_client = RpcClient::new("https://api.mainnet-beta.solana.com");

println!("Processing payment via Solana");

}

async fn send_notification() {

println!("Sending notification via WebSockets, Email, SMS, Firebase");

}

async fn chat_service() {

let (tx, _rx) = broadcast::channel::<Message>(10);

println!("Chat service initialized with AI assistant");

}

#[tokio::main]

async fn main() {

let pool = PgPool::connect("postgres://user:password@localhost/auth_db").await.unwrap();

let redis_client = redis::Client::open("redis://localhost/").unwrap();

let app = Router::new()

.route("/login", post(login))

.route("/register", post(register))

.route("/enable-2fa", post(enable_2fa))

.route("/webauthn-register", post(webauthn_register))

.route("/oauth2-login", post(oauth2_login))

.route("/ml-auth-analysis", post(ml_authentication_analysis))

.route("/payment-subscription", post(payment_subscription))

.route("/solana-payment", post(solana_payment))

.route("/send-notification", post(send_notification))

.route("/chat-service", post(chat_service))

.layer(CorsLayer::permissive());

axum::Server::bind(&"0.0.0.0:8080".parse().unwrap())

.serve(app.into_make_service())

.await

.unwrap();

}