guardian - django rest framework tutorial
Las credenciales de autenticación de Django Rest Framework no se proporcionaron (2)
Estoy usando django-rest-auth
con django-all-auth
en DRF y Angularjs. En cualquier solicitud con respecto a la autenticación, me sale el siguiente error:
{"detail":"Authentication credentials were not provided."}
Pasando a través de SO, me di cuenta de que hay muchos problemas similares, así que acumulándolos juntos, intenté lo siguiente:
settings.py
INSTALLED_APPS = (
''django.contrib.admin'',
''django.contrib.auth'',
''django.contrib.contenttypes'',
''django.contrib.sessions'',
''django.contrib.staticfiles'',
''django.contrib.sites'',
...
''rest_framework'',
''rest_framework.authtoken'',
''rest_auth'',
...
''allauth'',
''allauth.account'',
''rest_auth.registration'',
''allauth.socialaccount'',
''allauth.socialaccount.providers.facebook'',
)
MIDDLEWARE_CLASSES = (
''django.contrib.sessions.middleware.SessionMiddleware'',
''corsheaders.middleware.CorsMiddleware'',
''django.middleware.common.CommonMiddleware'',
''django.middleware.csrf.CsrfViewMiddleware'',
''django.contrib.auth.middleware.AuthenticationMiddleware'',
''django.contrib.auth.middleware.SessionAuthenticationMiddleware'',
''django.contrib.messages.middleware.MessageMiddleware'',
''django.middleware.clickjacking.XFrameOptionsMiddleware'',
)
DEFAULT_AUTHENTICATION = {
''DEFAULT_AUTHENTICATION_CLASSES'': (
''rest_framework.authentication.OAuth2Authentication'',
''rest_framework.authentication.TokenAuthentication'',
),
}
REST_FRAMEWORK = {
''DEFAULT_PERMISSION_CLASSES'': (
''rest_framework.permissions.IsAdminUser''
),
}
AUTHENTICATION_BACKENDS = (
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend"
)
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"django.contrib.auth.context_processors.auth",
"allauth.account.context_processors.account",
"allauth.socialaccount.context_processors.socialaccount",
)
REST_SESSION_LOGIN = False
Mi archivo app.js
sgApp.config([''$routeProvider'',''$locationProvider'', ''$httpProvider'',
function($routeProvider, $locationProvider, $httpProvider){
$routeProvider.when(''/'',{
templateUrl: ''/static/partials/index.html'',
controller: ''indexCtrl''
}).when(''/abc'',{
templateUrl: ''static/partials/index.html''
}).otherwise({
redirectTo: ''/''
});
$locationProvider.html5Mode(true).hashPrefix(''!'');
$httpProvider.defaults.xsrfCookieName = ''csrftoken'';
$httpProvider.defaults.xsrfHeaderName = ''X-CSRFToken'';
}
]).controller(''someCtrl'', function($scope, $http, $httpProvider){
$scope.login = function() {
Facebook.login(function(response) {
var postDict = {
access_token: response.authResponse.accessToken
}
$http.post(''/sgAuth/facebook/'', postDict).
success(function(data){
$httpProvider.defaults.headers.common.Authorization = ''Token '' + data.key;
$scope.loggedIn = true;
$scope.userDetails(); //function that gets user details
});
});
};
});
¿Dónde estoy equivocado?
Tienes clase de permiso en tu configuración:
REST_FRAMEWORK = {
''DEFAULT_PERMISSION_CLASSES'': (
''rest_framework.permissions.IsAdminUser''
),
}
Por lo tanto, solo se realizan las solicitudes realizadas por el usuario administrador.
Tuve el mismo problema en tu línea:
$ httpProvider.defaults.headers.common.Authorization = ''Token'' + data.key;
Prueba esto:
httpProvider.defaults.headers.common.Authorization = ''JWT'' + data.key;
Saludos.