Angular + Django Backend. Как войти в систему на основе типов пользователей в Django
Я столкнулся с проблемой, как интегрировать права пользователя, например, если is_superuser равен False, то вход в компонент Author, а если Superuser равен True, то вход в компонент Admin в Angular. Надеюсь, кто-нибудь сможет помочь
Что я хочу, 1) Если is_superuser равен True в django, то войти в компонент Admin / панель администратора 2) Если is_superuser равен False в django, то войти в компонент Author / Author dashboard
class MyAuthToken(auth_views.ObtainAuthToken):
serializer_class = MyAuthTokenSerializer
@action(detail=True, methods=['POST'])
def post(self, request, *args, **kwargs):
response = super(MyAuthToken, self).post(request, *args, **kwargs)
token = Token.objects.get(key=response.data['token'])
user = CustomUser.objects.get(id=token.user_id)
users = json.dumps(UserSerializer(user).data)
id = json.loads(users)["id"]
email = json.loads(users)["email"]
is_superuser = json.loads(users)["is_superuser"]
return Response({'id': id, 'email': email, 'is_superuser': is_superuser,
'token': token.key})
наконец-то решил свою проблему. Я вернул json-ответ, который будет включать некоторые данные пользователя на front end. затем вызвал его на front end. Вот как я сделал это в своем фронт-энде. Я записал консольный лог, чтобы проверить результаты
interface TokenObj {
id: number
email: string
is_superuser: boolean;
token: string;
}
_id: number;
_email: string;
_is_superuser: boolean;
_token: any;
mrToken: string;
loginUser() {
this.service.userLogin(this.authForm.value).subscribe(
(result: TokenObj) => {
this._token = this.cookieService.set('mr-token', result.token);
this._id = result.id
this._email = result.email
this._is_superuser = result.is_superuser
this._token = result.token
console.log("******** id " + this._id);
console.log("******** email " + this._email);
console.log("******** is_superuser " + this._is_superuser);
console.log("******** token " + this._token);
if (this._is_superuser === true && this._token){
this.router.navigateByUrl('/approuting');
}
else if (this._is_superuser === false && this._token){
this.router.navigateByUrl('/approuting/employee');
}
},
error => console.log(alert("wrong credentials"))
);
}
}
Я очень хотел опубликовать свой ответ, поэтому я создал новую учетную запись. Я надеюсь, что другой аккаунт сможет опубликовать ответы в ближайшее время. Я также надеюсь, что это найдет начинающих программистов, которые, как и я, интегрируют angular и Django для веб-разработки