|
@@ -215,28 +215,45 @@ export class CloudQuery {
|
|
|
|
|
|
|
|
|
export class CloudUser extends CloudObject {
|
|
|
- sessionToken: string | null = "";
|
|
|
-
|
|
|
constructor() {
|
|
|
- super("_User");
|
|
|
- let userCacheStr = localStorage.getItem("NCloud/dev/User");
|
|
|
- if (userCacheStr) {
|
|
|
- let userData = JSON.parse(userCacheStr);
|
|
|
+ super("_User"); // 假设用户类在Parse中是"_User"
|
|
|
+ // 读取用户缓存信息
|
|
|
+ let userCacheStr = localStorage.getItem("NCloud/dev/User")
|
|
|
+ if(userCacheStr){
|
|
|
+ let userData = JSON.parse(userCacheStr)
|
|
|
+ // 设置用户信息
|
|
|
this.id = userData?.objectId;
|
|
|
this.sessionToken = userData?.sessionToken;
|
|
|
- this.data = userData;
|
|
|
+ this.data = userData; // 保存用户数据
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // 获取当前用户信息
|
|
|
+ sessionToken:string|null = ""
|
|
|
+ /** 获取当前用户信息 */
|
|
|
async current() {
|
|
|
if (!this.sessionToken) {
|
|
|
console.error("用户未登录");
|
|
|
return null;
|
|
|
}
|
|
|
- return this;
|
|
|
+
|
|
|
+ const response = await fetch(`http://dev.fmode.cn:1337/parse/users/me`, {
|
|
|
+ headers: {
|
|
|
+ "x-parse-application-id": "dev",
|
|
|
+ "x-parse-session-token": this.sessionToken // 使用sessionToken进行身份验证
|
|
|
+ },
|
|
|
+ method: "GET"
|
|
|
+ });
|
|
|
+
|
|
|
+ const result = await response?.json();
|
|
|
+ if (result?.error) {
|
|
|
+ console.error(result?.error);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ return result;
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
// 登录
|
|
|
async login(username: string, password: string): Promise<CloudUser | null> {
|
|
|
const response = await fetch(`http://dev.fmode.cn:1337/parse/login`, {
|
|
@@ -253,19 +270,53 @@ export class CloudUser extends CloudObject {
|
|
|
console.error(result?.error);
|
|
|
return null;
|
|
|
}
|
|
|
- // 登录成功后保存用户信息和 sessionToken
|
|
|
+ // 设置用户信息
|
|
|
this.id = result?.objectId;
|
|
|
this.sessionToken = result?.sessionToken;
|
|
|
- this.data = result;
|
|
|
-
|
|
|
- // 将用户信息保存到 localStorage 方便下次访问
|
|
|
- localStorage.setItem("NCloud/dev/User", JSON.stringify(result));
|
|
|
-
|
|
|
+ this.data = result; // 保存用户数据
|
|
|
+ // 缓存用户信息
|
|
|
+ console.log(result)
|
|
|
+ localStorage.setItem("NCloud/dev/User",JSON.stringify(result))
|
|
|
return this;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 登出
|
|
|
+ async logOut(){
|
|
|
+
|
|
|
+ if (!this.sessionToken) {
|
|
|
+ console.error("用户未登录");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ const response = await fetch(`http://dev.fmode.cn:1337/parse/logout`, {
|
|
|
+ headers: {
|
|
|
+ "x-parse-application-id": "dev",
|
|
|
+ "x-parse-session-token": this.sessionToken
|
|
|
+ },
|
|
|
+ method: "POST"
|
|
|
+ });
|
|
|
+ const result = await response?.json();
|
|
|
+ if (result?.error) {
|
|
|
+ console.error(result?.error);
|
|
|
+ return false;
|
|
|
+
|
|
|
+ }
|
|
|
+ // 清除用户信息
|
|
|
+ localStorage.removeItem("NCloud/dev/User")
|
|
|
+ this.id = null;
|
|
|
+ this.sessionToken = null;
|
|
|
+ this.data = {};
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
// 注册
|
|
|
async signUp(username: string, password: string, email: string): Promise<CloudUser | null> {
|
|
|
+ const userData = {
|
|
|
+ username,
|
|
|
+ password,
|
|
|
+
|
|
|
+ };
|
|
|
const response = await fetch(`http://dev.fmode.cn:1337/parse/users`, {
|
|
|
headers: {
|
|
|
"x-parse-application-id": "dev",
|
|
@@ -280,74 +331,241 @@ export class CloudUser extends CloudObject {
|
|
|
console.error(result?.error);
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ // 设置用户信息
|
|
|
+ this.id = result?.objectId;
|
|
|
+ this.sessionToken = result?.sessionToken;
|
|
|
+ this.data = result; // 保存用户数据
|
|
|
+
|
|
|
+
|
|
|
// 注册成功后自动登录
|
|
|
- return await this.login(username, password);
|
|
|
+ return await this.login(username, password);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+//fearlessUser类封装
|
|
|
+// src/lib/fearlessUser.ts
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+export class FearlessUser extends CloudObject {
|
|
|
+ static getCurrentUser(): FearlessUser | undefined {
|
|
|
+ throw new Error('Method not implemented.');
|
|
|
+ }
|
|
|
+ sessionToken: any;
|
|
|
+ constructor() {
|
|
|
+ super("FearlessUser"); // 假设 FearlessUser 类在 Parse 中是 "FearlessUser"
|
|
|
}
|
|
|
|
|
|
- // 注销
|
|
|
- async logOut(): Promise<void> {
|
|
|
- // 删除用户信息和 sessionToken
|
|
|
- localStorage.removeItem("NCloud/dev/User");
|
|
|
- this.id = null;
|
|
|
- this.sessionToken = null;
|
|
|
- this.data = {};
|
|
|
+ /** 获取单个用户信息 */
|
|
|
+ async getUser(id: string) {
|
|
|
+ const url = `http://dev.fmode.cn:1337/parse/classes/FearlessUser/${id}?`;
|
|
|
+
|
|
|
+ const response = await fetch(url, {
|
|
|
+ headers: {
|
|
|
+ "x-parse-application-id": "dev"
|
|
|
+ },
|
|
|
+ method: "GET",
|
|
|
+ mode: "cors",
|
|
|
+ credentials: "omit"
|
|
|
+ });
|
|
|
+
|
|
|
+ const result = await response?.json();
|
|
|
+ if (result?.error) {
|
|
|
+ console.error(result?.error);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.dataToObj(result);
|
|
|
}
|
|
|
|
|
|
- // 修改密码
|
|
|
- async changePassword(newPassword: string): Promise<boolean> {
|
|
|
- if (!this.sessionToken) {
|
|
|
+ /** 获取当前登录用户的 `FearlessUser` 信息 */
|
|
|
+ async getCurrentUserInfo() {
|
|
|
+ const cloudUser = new CloudUser();
|
|
|
+ const currentUser = await cloudUser.current();
|
|
|
+
|
|
|
+ if (!currentUser) {
|
|
|
console.error("用户未登录");
|
|
|
- return false;
|
|
|
+ return null;
|
|
|
}
|
|
|
|
|
|
- const response = await fetch(`http://dev.fmode.cn:1337/parse/users/${this.id}`, {
|
|
|
+ const currentUserId = currentUser.objectId;
|
|
|
+
|
|
|
+ // 通过 _User 的 objectId 查询 FearlessUser 表中的记录
|
|
|
+ const query = new CloudQuery("FearlessUser");
|
|
|
+ query.equalTo("user", { "__type": "Pointer", "className": "_User", "objectId": currentUserId });
|
|
|
+
|
|
|
+ const fearlessUser = await query.first();
|
|
|
+ return fearlessUser;
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 创建或保存用户信息 */
|
|
|
+ async saveUserInfo(userData: Record<string, any>) {
|
|
|
+ const cloudUser = new CloudUser();
|
|
|
+ const currentUser = await cloudUser.current();
|
|
|
+
|
|
|
+ if (!currentUser) {
|
|
|
+ console.error("用户未登录");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ const userPointer = { "__type": "Pointer", "className": "_User", "objectId": currentUser.objectId };
|
|
|
+
|
|
|
+ const newUserInfo = {
|
|
|
+ ...userData,
|
|
|
+ user: userPointer // 将当前用户作为外键关联到 FearlessUser 表
|
|
|
+ };
|
|
|
+
|
|
|
+ const url = `http://dev.fmode.cn:1337/parse/classes/FearlessUser`;
|
|
|
+
|
|
|
+ const response = await fetch(url, {
|
|
|
headers: {
|
|
|
- "x-parse-application-id": "dev",
|
|
|
- "x-parse-session-token": this.sessionToken!,
|
|
|
- "Content-Type": "application/json"
|
|
|
+ "Content-Type": "application/json",
|
|
|
+ "x-parse-application-id": "dev"
|
|
|
},
|
|
|
- body: JSON.stringify({ password: newPassword }),
|
|
|
- method: "PUT"
|
|
|
+ method: "POST",
|
|
|
+ body: JSON.stringify(newUserInfo),
|
|
|
+ mode: "cors",
|
|
|
+ credentials: "omit"
|
|
|
});
|
|
|
|
|
|
const result = await response?.json();
|
|
|
if (result?.error) {
|
|
|
console.error(result?.error);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ return this.dataToObj(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 更新当前用户的信息 */
|
|
|
+ async updateUserInfo(updatedData: Record<string, any>) {
|
|
|
+ const cloudUser = new CloudUser();
|
|
|
+ const currentUser = await cloudUser.current();
|
|
|
+
|
|
|
+ if (!currentUser) {
|
|
|
+ console.error("用户未登录");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ const currentUserId = currentUser.objectId;
|
|
|
+
|
|
|
+ // 查找当前用户的 FearlessUser 信息
|
|
|
+ const query = new CloudQuery("FearlessUser");
|
|
|
+ query.equalTo("user", { "__type": "Pointer", "className": "_User", "objectId": currentUserId });
|
|
|
+
|
|
|
+ const fearlessUser = await query.first();
|
|
|
+ if (!fearlessUser) {
|
|
|
+ console.error("未找到用户信息");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新信息
|
|
|
+ fearlessUser.set(updatedData);
|
|
|
+ await fearlessUser.save();
|
|
|
+
|
|
|
+ return fearlessUser;
|
|
|
+ }
|
|
|
+
|
|
|
+ /** 删除当前用户的 FearlessUser 信息 */
|
|
|
+ async deleteUserInfo() {
|
|
|
+ const cloudUser = new CloudUser();
|
|
|
+ const currentUser = await cloudUser.current();
|
|
|
+
|
|
|
+ if (!currentUser) {
|
|
|
+ console.error("用户未登录");
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
+ const currentUserId = currentUser.objectId;
|
|
|
+
|
|
|
+ // 查找当前用户的 FearlessUser 信息
|
|
|
+ const query = new CloudQuery("FearlessUser");
|
|
|
+ query.equalTo("user", { "__type": "Pointer", "className": "_User", "objectId": currentUserId });
|
|
|
+
|
|
|
+ const fearlessUser = await query.first();
|
|
|
+ if (!fearlessUser) {
|
|
|
+ console.error("未找到用户信息");
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 删除 FearlessUser 记录
|
|
|
+ await fearlessUser.destroy();
|
|
|
+
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- // 修改用户信息
|
|
|
- async updateUserInfo(newData: Record<string, any>): Promise<boolean> {
|
|
|
+ /** 将查询结果转换为 CloudObject */
|
|
|
+ private dataToObj(result: any): CloudObject {
|
|
|
+ let userObject = new CloudObject(this.className);
|
|
|
+ userObject.set(result);
|
|
|
+ userObject.id = result.objectId;
|
|
|
+ userObject.createdAt = result.createdAt;
|
|
|
+ userObject.updatedAt = result.updatedAt;
|
|
|
+ return userObject;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ async logOut() {
|
|
|
if (!this.sessionToken) {
|
|
|
console.error("用户未登录");
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- const response = await fetch(`http://dev.fmode.cn:1337/parse/users/${this.id}`, {
|
|
|
+ const response = await fetch(`http://dev.fmode.cn:1337/parse/logout`, {
|
|
|
headers: {
|
|
|
"x-parse-application-id": "dev",
|
|
|
- "x-parse-session-token": this.sessionToken!,
|
|
|
- "Content-Type": "application/json"
|
|
|
+ "x-parse-session-token": this.sessionToken
|
|
|
},
|
|
|
- body: JSON.stringify(newData),
|
|
|
- method: "PUT"
|
|
|
+ method: "POST"
|
|
|
});
|
|
|
-
|
|
|
+
|
|
|
const result = await response?.json();
|
|
|
if (result?.error) {
|
|
|
console.error(result?.error);
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
- // 更新本地缓存
|
|
|
- this.data = { ...this.data, ...newData };
|
|
|
- localStorage.setItem("NCloud/dev/User", JSON.stringify(this.data));
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
-}
|
|
|
+
|
|
|
+ async login(username: string, password: string): Promise<FearlessUser | null> {
|
|
|
+ const response = await fetch(`http://dev.fmode.cn:1337/parse/login`, {
|
|
|
+ headers: {
|
|
|
+ "x-parse-application-id": "dev",
|
|
|
+ "Content-Type": "application/json"
|
|
|
+ },
|
|
|
+ body: JSON.stringify({ username, password }),
|
|
|
+ method: "POST"
|
|
|
+ });
|
|
|
|
|
|
-
|
|
|
+ const result = await response?.json();
|
|
|
+ if (result?.error) {
|
|
|
+ console.error(result?.error);
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+ // 设置用户信息
|
|
|
+ this.id = result?.objectId;
|
|
|
+ this.sessionToken = result?.sessionToken;
|
|
|
+ this.data = result; // 保存用户数据
|
|
|
+ // 缓存用户信息
|
|
|
+ console.log(result)
|
|
|
+ localStorage.setItem("NCloud/dev/User",JSON.stringify(result))
|
|
|
+ return this;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+}
|