
从 fastapi 官方的示例代码修改,现在想删除一条数据,总是返回 403 求教是什么原因?
后端:
@router.delete("/{user_id}", response_model=schemas.User) def delete_user( user_id: int, *, db: Session = Depends(deps.get_db), user_in: schemas.UserDelete, current_user: models.adminUser = Depends(deps.get_current_active_superuser), ) -> Any: user = crud.user.remove(db, user_id=user_id) if user is None: raise HTTPException( status_code=404, detail="User not found", ) return user # remove 方法 def remove( self, db: Session, user_id: int ) -> adminUser: db_user = db.query(adminUser).filter(adminUser.id == user_id).first() if db_user: db.delete(db_user) db.commit() db.flush() return db_user 前端:
async actionDeleteUser(context: MainContext, payload: IUserDelete) { try { const loadingNotification = { content: 'delete', showProgress: true }; commitAddNotification(context, loadingNotification); const respOnse= (await Promise.all([ api.deleteUser(context.rootState.main.token, payload.id), await new Promise((resolve, reject) => setTimeout(() => resolve(), 500)), ]))[0]; } catch (error) { await dispatchCheckApiError(context, error); } }, 1 juventusryp OP 用 postman 在 headers 添加了 access_token 是可以删除的 求问,如何在前端的代码中添加 access_token |
2 renmu123 2020 年 8 月 4 日 via Android 你在 docs 里的授权抓一下请求看看,前端我记得是添加在 authentication header 中,前端可以用拦截器拦截 request 统一在 header 中添加这个字段,你可以搜一下,网上到处都是 |
3 ncjcharlie 2020 年 8 月 5 日 via iPhone postman 是可以直接输出各平台代码的 直接看看 js 的几个就好了 |
4 juventusryp OP 找到原因了,是因为用 axios 发送 delete 请求时候,需要发送一个 body 字段,为空就行。 如果不发送会提示{loc: ["body"], msg: "field required", type: "value_error.missing"} 现在问题转化为官方的示例代码如果添加这个字段,自己按照代码比葫芦画瓢总是失败 ``` async deleteUser(token: string, userId: number, data) { return axios.delete(`${apiUrl}/api/v1/users/${userId}`, data, authHeaders(token)); }, ``` |