如何修复{detail:未提供身份验证凭据.}在Django Rest框架中



我一直在努力从Django rest框架作为后端和使用flutter从前端获取信息。

项目的项目顺序是我登录并接收一个{"key":"XXXXXXXXXXXXX"}

只是为了测试的目的,我正试图手动添加密钥以获得访问权限。我一直得到{detail: Authentication credentials were not provided.}我不确定是否错误是因为Django Rest框架设置或Flutter前端

下面是主界面中的Fetch user():

Future<User> fetchUser() async {
var url = Uri.parse(Config.apiURL + Config.userProfileAPI);
print(url);
final response = await http.post(
url,
// headers: {
//   HttpHeaders.authorizationHeader:
//       'Bearer XXXXXXXXXXXXX',
headers: {
"Authorization": 'JWT XXXXXXXXXXXXX'
// 'Authorization:  ',
},);
final responseJson = jsonDecode(response.body);
print(responseJson);
if (response.statusCode == 200) {
return User.fromJson(jsonDecode(response.body));
} else {
throw Exception('Failed to load User');
}}
class User {
int? pk;
String? username;
User({this.pk, this.username});
User.fromJson(Map<String, dynamic> json) {
pk = json['pk'];
username = json['username'];}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['pk'] = this.pk;
data['username'] = this.username;
return data;}}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();}
class _HomeScreenState extends State<HomeScreen> {
late Future<User> futureUser;
@override
void initState() {
super.initState();
futureUser = fetchUser();}
@override
Widget build(BuildContext context) {
return MaterialApp(
.........................
FutureBuilder<User>(
future: futureUser,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data!.username ?? 'noname');
} else if (snapshot.hasError) ;
print(snapshot.error);
{return Text('${snapshot.error}');}
return const CircularProgressIndicator();
},),),],)),),);}}
下面是Django Rest框架的设置:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
]
}
AUTHENTICATION_BACKENDS=['users.models.EmailBackend']
CORS_ALLOW_ALL_ORIGINS=True
AllowAny =True

我的问题:

登录后为什么我的HttpHeaders.authorizationHeader不工作,如果用户已经登录,我应该能够直接使用令牌密钥获取用户详细信息吗?

在我的Django中,我得到Unauthorized: /api/dj-rest-auth/user/

您需要将TokenAuthentication添加到DEFAULT_AUTHENTICATION_CLASSES中,因此:

REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.BasicAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
]
}

addrest_framework.authtokentoINSTALLED_APPS:

INSTALLED_APPS = [
...
'rest_framework.authtoken',
]

在颤振:

headers: {
"Authorization": 'Token XXXXXXXXXXXXX'
},);

最新更新