我遇到的问题
似乎有用的部分
@csrf_exempt
def userlogin(request):
body_unicode = request.body.decode('utf-8')
body = json.loads(body_unicode)
input_u = body['uname']
input_p = body['pword']
worked = False
user = authenticate(username=input_u, password=input_p)
if user is not None:
login(request, user)
context = { "login_data" : { "logged_in" : True, "user_id" : user.id } }
else:
context = { "login_data" : { "logged_in" : False, "user_id" : 0 } }
return HttpResponse(json.dumps(context), content_type="application/json")
我正在努力解决
@ensure_csrf_cookie
def user(request):
is_auth = False
if request.user.is_authenticated():
is_auth = True
context = { "is_auth" : is_auth }
return HttpResponse(json.dumps(context), content_type="application/json")
注意:我使用 is_authenticated()(功能),而不是 is_authenticated (属性),因为我正在使用在Django v1.9而不是v.1.10(source)上。我以前犯了检查属性的错误,它总是返回true,但是当我尝试从请求对象返回用户的ID时,它总是为空。
我在这里一直都是假的。这是我第一次尝试使用Django进行身份验证,所以我只想在这里提出一些问题:
我做错了什么吗?我想我在设置中拥有所需的所有东西:
INSTALLED_APPS = [
'search.apps.SearchConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders'
]
我也有' django.contrib.auth.middleware.AuthenticationMiddleware', ' django.contrib.auth.middleware.SessionAuthenticationMiddleware'在我的中间件中。
Django究竟知道用户是否经过身份验证?我假设因为我激活了会话,所以它会检查会话cookie。但是,我怀疑这可能是个问题。在检查时,我今天下午为localhost安排了一个cookie。但是,从那时起我已登录并无法更新。我甚至尝试过Django内置的测试cookie功能(source),但是当我测试它时它不会起作用。我的设置应该没问题,我有以下内容:
INSTALLED_APPS = ['django.contrib.sessions']
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"
MIDDLEWARE_CLASSES = [
...
'django.contrib.sessions.middleware.SessionMiddleware',
...
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
...]
我怀疑我错过了一些显而易见的东西,但我现在已经读了一段时间而没有运气。
谢谢,伙计们! 尼克
答案 0 :(得分:0)
您没有在INSTALLED_APPS中使用contrib.auth应用。
答案 1 :(得分:0)
从我遇到的另一个问题找到解决我自己问题的方法。
问题是Angular没有向Django服务器发送cookie。由于Angular默认使用CORS,我不得不将{withCredentials:true}添加到RequestOptions对象。
实施例: editUser(userdata){
console.log("UserService: createUser function called");
console.log(JSON.stringify(userdata));
if(this.validateData(userdata)) {
let headers = new Headers({
'Content-Type': 'application/json',
'X-CSRFToken': this.getCookie('csrftoken')
});
let options = new RequestOptions({ headers: headers, withCredentials: true });
return this._http
.post(
this._editUserUri,
JSON.stringify(userdata),
options)
.map(res => {
console.log(res.json());
return res.json();
})
}
}