. Biasanya Kerana pengguna yang meminta tidak mempunyai kebenaran yang mencukupi untuk melaksanakan operasi. Ini mungkin kerana pengguna tidak log masuk atau log masuk telah tamat tempoh, atau pengguna tidak mempunyai kebenaran yang mencukupi untuk mengakses sumber.
Ralat ini boleh dilemparkan ke dalam kod anda dengan membuang HTTPException, atau ia mungkin disebabkan oleh kebenaran pengguna yang tidak mencukupi yang diminta.
Biasanya, anda harus menyemak dalam fungsi penghalaan sama ada kebenaran pengguna yang meminta adalah mencukupi, dan jika tidak, buang pengecualian ini.
Contohnya:
from fastapi import FastAPI, HTTP
Salin selepas log masuk
Pengecualian, bergantungDari Fastapi.Security Import Oauth2passWordBearer
app = Fastapi ()
# tentukan skim keselamatan OAUTH2PASSWORDBEARER (tokenurl = "/token")
("/app")
")
async def create_item(item: Item,Authorization: str = Depends(oauth2_scheme)):
if not check_user_has_permission(Authorization):
naikkan HTTPException(status_code=status.HTTP_401_detail,IZtED_permission=cukup headers={"WWW-Authenticate": authenticate_value})
kembali {"item": item}
在上面的示例中,我们使用 OAuth2PasswordBearer 来验证请求用户是否已经登录,并在路由函数中使用 check_user_has_permission 检查请求用户是否有权限访问该资源,如果用户权限不足,将会抛出 HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Not enough permissions",headers={"WWW-Authenticate": authenticate_value})
这只是一个简单的示例,具体实现还需根据项目具体需求来实现。
Salin selepas log masuk
Cara menyelesaikan
Untuk menyelesaikan masalah ini, anda boleh mengambil salah satu kaedah berikut:
Pastikan pengguna telah log masuk dan log masuk belum tamat tempoh. Jika pengguna tidak log masuk atau log masuk telah tamat tempoh, dia perlu log masuk semula.
Pastikan pengguna mempunyai kebenaran yang mencukupi untuk mengakses sumber tersebut. Jika pengguna tidak mempunyai kebenaran yang mencukupi, pengguna perlu diberikan kebenaran yang sepadan.
Dalam fungsi penghalaan, semak sama ada kebenaran pengguna yang meminta adalah mencukupi. Jika tidak, kembalikan mesej ralat terperinci
Jika ia disebabkan oleh masalah kod program, anda perlu menyemak kod yang berkaitan untuk mengesahkan kebenaran pengguna dan membetulkan. masalah.
Jika ia disebabkan oleh perpustakaan pihak ketiga, semak dokumentasi perpustakaan yang berkaitan atau minta komuniti untuk mendapatkan penyelesaian.
Kaedah ini mungkin tidak sesuai untuk semua situasi, dan penyelesaian khusus perlu ditentukan berdasarkan keadaan khusus projek.
Contoh Penggunaan
Berikut ialah contoh menggunakan kaedah pengesahan kebenaran terbina dalam FastAPI:
from fastapi import FastAPI, HTTPException, Depends
from fastapi.security import OAuth2PasswordBearer
app = FastAPI()
# define the security scheme for the api
oauth2_scheme = OAuth2PasswordBearer(tokenUrl="/token")
@app.post("/items/")
async def create_item(item: Item, Authorization: str = Depends(oauth2_scheme)):
if not check_user_has_permission(Authorization):
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Not enough permissions",headers={"WWW-Authenticate": authenticate_value})
return {"item": item}
Salin selepas log masuk
Dalam contoh di atas, kami menggunakan OAuth2PasswordBearer untuk mengesahkan sama ada pengguna yang meminta dilog masuk dan menggunakan check_user_has_permission dalam fungsi penghalaan untuk menyemak sama ada pengguna yang meminta mempunyai kebenaran untuk mengakses sumber Jika pengguna tidak mempunyai kebenaran yang mencukupi, HTTPException(status_code =status. HTTP_401_UNAUTHORIZED, detail="Tidak cukup kebenaran",headers={"WWW-Authenticate": authenticate_value})
dilaksanakan.
Dalam contoh ini, kami menggunakan OAuth2PasswordBearer terbina dalam FastAPI untuk mengesahkan pengguna yang meminta. Ia memerlukan tokenUrl untuk menentukan cara mengesahkan token. Dalam contoh di atas, kami menganggap bahawa sudah ada fungsi penghalaan dengan tokenUrl "/token" untuk mengesahkan token.
Dalam fungsi penghalaan, kami menggunakan check_user_has_permission untuk menyemak sama ada pengguna mempunyai kebenaran yang mencukupi untuk mengakses sumber. Fungsi ini boleh dilaksanakan mengikut keperluan khusus projek. Contohnya, anda boleh bertanya sama ada pengguna mempunyai kebenaran dalam
pangkalan data
atau membaca peranan pengguna dalam token
Jwt
.
Jika pengguna tidak mempunyai kebenaran yang mencukupi, HTTPException akan dilemparkan, respons dengan kod status 401 akan dikembalikan dan medan WWW-Authenticate akan ditetapkan dalam pengepala respons. Dengan cara ini, penyemak imbas atau klien boleh mengenali bahawa pengguna perlu log masuk semula.
Atas ialah kandungan terperinci Mengapa HTTPException(status_code=status.HTTP_401_UNAUTHORIZED,detail=\'Tidak cukup kebenaran\',headers={\'WWW-Authenticate\': authenticate_value},) dan cara menyelesaikannya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!