Skip to main content

ncm_api_rs/api/
login.rs

1use super::Query;
2use crate::error::Result;
3/// 邮箱登录
4/// 对应 Node.js module/login.js
5use crate::request::{ApiClient, ApiResponse, CryptoType};
6use md5::{Digest, Md5};
7use serde_json::json;
8
9impl ApiClient {
10    /// 邮箱登录
11    /// 对应 /login
12    ///
13    /// 注意: Node.js 版本会对密码做 MD5 处理,Rust 版本需要传入 md5_password 或预先 MD5 后的 password
14    pub async fn login(&self, query: &Query) -> Result<ApiResponse> {
15        let password = if let Some(md5_pw) = query.get("md5_password") {
16            md5_pw.to_string()
17        } else {
18            let pw = query.get("password").unwrap_or("");
19            format!("{:x}", Md5::digest(pw.as_bytes()))
20        };
21        let data = json!({
22            "type": "0",
23            "https": "true",
24            "username": query.get("email").unwrap_or(""),
25            "password": password,
26            "rememberLogin": "true"
27        });
28        let mut result = self
29            .request("/api/w/login", data, query.to_option(CryptoType::default()))
30            .await?;
31        if result.body.get("code").and_then(|v| v.as_i64()) == Some(502) {
32            result.status = 200;
33            result.body = json!({
34                "msg": "账号或密码错误",
35                "code": 502,
36                "message": "账号或密码错误"
37            });
38        }
39        Ok(result)
40    }
41}