2016-09-13 2 views
-2

Я делаю сайт, используя Django и AngularJs2.Добавить CSRF-TOKEN в angularJs 2

Когда я создал форму Войти затем отправить форму, Джанго показывает ошибку:

forbidden (CSRF token missing or incorrect.)

Я знаю, Django хочет, чтобы добавить маркер CSRF, но я не знаю, как.

UPDATE это user.service.ts:

import { Injectable } from '@angular/core'; 
import { Http, Headers } from '@angular/http'; 

@Injectable() 
export class UserService { 
    private loggedIn = false; 

    constructor(private http: Http) { 
    this.loggedIn = !!localStorage.getItem('auth_token'); 
} 

login(email:string, password:string) { 
let headers = new Headers(); 
headers.append('Content-Type', 'application/json'); 

return this.http 
    .post(
    '/accounts/login', 
    JSON.stringify({ email, password }), 
    { headers } 
) 
    .map(res => res.json()) 
    .map((res) => { 
    if (res.success) { 
     /* localStorage.setItem('auth_token', res.auth_token); 
     this.loggedIn = true; */ 
     console.log(res); 
    } 

    return res.success; 
    }); 
} 

logout() { 
    localStorage.removeItem('auth_token'); 
    this.loggedIn = false; 
} 

isLoggedIn() { 
    return this.loggedIn; 
} 
} 

login.component.ts:

// login.component.ts 
    import { Component } from '@angular/core'; 
    import { Router } from '@angular/router'; 

    import { UserService } from './user.service'; 

    @Component({ 
     selector: 'login', 
     template: `...` 
    }) 
    export class LoginComponent { 
     constructor(private userService: UserService, private router:   Router) {} 

     onSubmit(email, password) { 
      this.userService.login(email, password).subscribe((result) => { 
     if (result) { 
      this.router.navigate(['']); 
      } 
     }); 
     } 
    } 
+0

Недостаточно кода для представления проблемы –

+0

См. Https://docs.djangoproject.com/en/1.10/ref/csrf/#ajax, поскольку это должно помочь. Как только вы берете значение, отправьте его как дополнительные заголовки, как показано Себастьяном. – Arnaud

ответ

0
from django.views.decorators.csrf import csrf_exempt 

@csrf_exempt 
def your_view(request): 
    pass 

или если вы хотите иметь CSRF, отправить его ваш угловой

$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
$httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
+0

, если я использую @csrf_exempt, тогда DJANGO показывает сообщение об ошибке: Forbidden (CSRF cookie не установлен.):/Accounts/login, сообщение об ошибке переднего конца: Ответ со статусом: 403 Запрещено для URL: http: // localhost: 8000/учетные записи/логин –

+0

$ httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; $ httpProvider.defaults.xsrfCookieName = 'csrftoken'; Я не знаю, как использовать его, где я могу поместить его в код файла! ???? –

Смежные вопросы