无法登录Angular2 / Django休息框架 [英] Unable to login Angular2 / Django rest framework

查看:172
本文介绍了无法登录Angular2 / Django休息框架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用以下Angular 2服务方式的会话认证。

  login(username:string,password:string) {
var data = {
username:username,
password:password
}
return this.http.post(environment.apiEndpoint +'login',data)
.catch((error)=> {
return Observable.throw(error.json());
});
}

结果响应包含 csrftoken sessionid ,但它被角度忽略。



使用凭据添加会导致CSRF无效令牌错误。 >

如何使用角度2和Django休息框架进行会话认证方案登录? Thnx提前!

解决方案

我使用Django会话auth与Angular2这样:

  loginUser(credentials:any):Observable< Profile> {
let headers = new Headers({'Content-Type':'application / json'});
headers.append(X-CSRFToken,this.utils.getCookie('csrftoken'));

let options = new RequestOptions({headers:headers,withCredentials:true});
返回this.http.post(this.userUrl +'auth /',凭证,选项)
.map(res => res.json())
.catch(this。的HandleError);
}

在基于Django类的视图中:



pre $ @method_decorator(csrf_protect)
def post(self,request,format = None):

user_data = request.data
self.logger.info('Authenticating user {0}'。format(user_data ['username']))


user = authenticate(username = user_data ['username'] ,password = user_data ['password'])
登录(请求,用户)

使用Django休息框架。但我建议你django-jwt auth而不是session(更不用说痛苦))。


I am using session authentication with the following Angular 2 service method.

  login(username : string, password : string) {
    var data = {
      username: username,
      password: password
    }
    return this.http.post(environment.apiEndpoint + 'login', data)
      .catch((error) => {
        return Observable.throw(error.json());
      });
  }

Result : Response contains csrftoken and sessionid in the header setcookie value but it's ignored by angular.

Adding with credentials causes CSRF invalid token error.

How to login using Angular 2 and Django rest framework with session authentication scheme ? Thnx in advance!

解决方案

I used Django session auth with Angular2 like this:

loginUser (credentials: any): Observable<Profile> {
let headers = new Headers({ 'Content-Type': 'application/json'});
headers.append("X-CSRFToken", this.utils.getCookie('csrftoken'));

let options = new RequestOptions({ headers: headers, withCredentials: true });
return this.http.post(this.userUrl + 'auth/', credentials , options)
              .map(res => res.json())
              .catch(this.handleError);
}

In Django class based view:

@method_decorator(csrf_protect)
def post(self, request, format=None):

    user_data = request.data
    self.logger.info('Authenticating user {0}'.format(user_data['username']))


    user = authenticate(username=user_data['username'], password=user_data['password'])
    login(request, user)

I used Django rest framework. But I suggest you django-jwt auth instead of session(much less pain:)).

这篇关于无法登录Angular2 / Django休息框架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆