[英]OpenID connect based authentication in Angular.js with (drf oidc) Django rest framework backend
[英]User Authentication in Django Rest Framework + Angular.js web app
我正在開發一個webapp,用戶可以登錄以查看他們的在線酒窖。
我有Django REST模型設置,以及Angular中的前端設計,但我將這些部分放在一起很麻煩,我的主要問題是用戶身份驗證。
我在這里閱讀了很多帖子和各種教程,但我似乎無法找到一步步實現身份驗證的方法:
根據我的理解,Angular在URL上發出POST請求,其中DRF驗證用戶名和密碼是否匹配並返回令牌或其他身份證明。
我覺得我很接近,但我需要更全面地了解這是如何將各個部分組合在一起的。
提前致謝
我想有很多方法可以做到這一點,讓我解釋一下我的做法,希望它有所幫助。 這將是一個很長的帖子。 我很想知道其他人如何做到這一點,或者更好的方法來實現相同的方法。 您還可以在Angular-Django-Seed的 Github上查看我的種子項目。
我使用Witold Szczerba的http-auth-interceptor進行令牌認證。 他的方法之一是,無論何時從您的站點發送沒有適當憑據的請求,您都會被重定向到登錄屏幕,但您的請求排隊等待在登錄完成時重新啟動。
這是一個與登錄表單一起使用的登錄指令。 它發布到Django的身份驗證令牌端點,使用響應令牌設置cookie,使用令牌設置默認頭,以便對所有請求進行身份驗證,並觸發http-auth-interceptor登錄事件。
.directive('login', function ($http, $cookieStore, authService) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
elem.bind('submit', function () {
var user_data = {
"username": scope.username,
"password": scope.password,
};
$http.post(constants.serverAddress + "api-token-auth", user_data, {"Authorization": ""})
.success(function(response) {
$cookieStore.put('djangotoken', response.token);
$http.defaults.headers.common['Authorization'] = 'Token ' + response.token;
authService.loginConfirmed();
});
});
}
}
})
我使用模塊.run方法設置用戶訪問網站時檢查cookie,如果他們有cookie設置我設置了默認授權。
.run(function($rootScope) {
$rootScope.$broadcast('event:initial-auth');
})
這是我的攔截器指令,它處理authService廣播。 如果需要登錄,我隱藏所有內容並顯示登錄表單。 否則隱藏登錄表單並顯示其他所有內容。
.directive('authApplication', function ($cookieStore, $http) {
return {
restrict: 'A',
link: function (scope, elem, attrs) {
var login = elem.find('#login-holder');
var main = elem.find('#main');
scope.$on('event:auth-loginRequired', function () {
main.hide();
login.slideDown('fast');
});
scope.$on('event:auth-loginConfirmed', function () {
main.show();
login.slideUp('fast');
});
scope.$on('event:initial-auth', function () {
if ($cookieStore.get('djangotoken')) {
$http.defaults.headers.common['Authorization'] = 'Token ' + $cookieStore.get('djangotoken');
}
else {
login.slideDown('fast');
main.hide();
}
});
}
}
})
要使用它我的所有HTML基本上都是這樣的。
<body auth-application>
<div id="login-holder">
... login form
</div>
<div id="main">
... ng-view, or the bulk of your html
</div>
查看django-rest-auth和angular-django-registration-auth
https://github.com/Tivix/angular-django-registration-auth
https://github.com/Tivix/django-rest-auth
我們試圖從這兩個庫中的后端和角度角度解決最常見的Django auth / registration相關事物。
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.