示例#1
0
def active_account(request):
    User = get_user_model()
    code = request.data.get('code')
    response = Response()
    User = get_user_model()
    if (code is None):
        return Response({'error': 'code not found'}, 404)
    
    digits = ActivationKeys.objects.get(code=code)
    if(digits is None):
        return Response({'error': 'invalid code'}, 401)
    user_is = digits.user.username
    active_user = User.objects.filter(username=user_is).first()
    if(active_user is None):
        return Response({'error': 'user not found'}, 404)

    role = RegisterationSerializer(active_user).data['role']
    author = RegisterationSerializer(active_user).data['username']

    access_token = generate_access_token(active_user)
    token_version = Token.objects.get(user=active_user)
    if(token_version is None):
        response.data = {'token_version': 'token version not exist'}
    refresh_token = generate_refresh_token(active_user, token_version)

    response.data = {
        'access_token': access_token,
        'role': role,
        'author': author,
    }

    return response
示例#2
0
def refresh_token_view(request):
    '''
    To obtain a new access_token this view expects 2 important things:
        1. a cookie that contains a valid refresh_token
        2. a header 'X-CSRFTOKEN' with a valid csrf token, client app can get it from cookies "csrftoken"
    '''
    User = get_user_model()
    refresh_token = request.COOKIES.get('refreshtoken')
    if refresh_token is None:
        raise exceptions.AuthenticationFailed(
            'Authentication credentials were not provided.')
    try:
        payload = jwt.decode(refresh_token,
                             settings.REFRESH_TOKEN_SECRET,
                             algorithms=['HS256'])
    except jwt.ExpiredSignatureError:
        raise exceptions.AuthenticationFailed(
            'expired refresh token, please login again.')

    user = User.objects.filter(id=payload.get('user_id')).first()
    if (user is None):
        raise exceptions.AuthenticationFailed('User not found')

    if not user.is_active:
        raise exceptions.AuthenticationFailed('user is inactive')

    user_token_version = Token.objects.filter(user=user).first()
    if user_token_version.token_version != payload.get('token_version'):
        raise exceptions.AuthenticationFailed(
            'revoked refresh token, user not authenticated.')

    access_token = generate_access_token(user)
    return Response({'access_token': access_token})
示例#3
0
def login_view(request):
    User = get_user_model()
    username = request.data.get('username')
    password = request.data.get('password')
    response = Response()
    if (username is None) or (password is None):
        raise exceptions.AuthenticationFailed('username and password required')

    user = User.objects.filter(username=username).first()
    if (user is None):
        raise exceptions.AuthenticationFailed('user not found')
    if (not user.check_password(password)):
        raise exceptions.AuthenticationFailed('wrong password')

    serialized_user = RegisterationSerializer(user).data['username']

    access_token = generate_access_token(user)
    token_version = Token.objects.get(user=user)
    if (token_version is None):
        response.data = {'token_version': 'token version not exist'}
    refresh_token = generate_refresh_token(user, token_version)

    response.set_cookie(key='refreshtoken', value=refresh_token, httponly=True)
    response.data = {
        'access_token': access_token,
        'user': serialized_user,
    }

    return response
示例#4
0
def login_view(request):
    User = get_user_model()
    username = request.data.get('username')
    password = request.data.get('password')
    response = Response()
    if (username is None) or (password is None):
        raise exceptions.AuthenticationFailed('username and password required')

    user = User.objects.filter(username=username).first()
    if (user is None):
        raise exceptions.AuthenticationFailed('user not found')
    if (not user.check_password(password)):
        raise exceptions.AuthenticationFailed('wrong password')

    role = RegisterationSerializer(user).data['role']
    author = RegisterationSerializer(user).data['username']

    access_token = generate_access_token(user)
    token_version = Token.objects.get(user=user)
    if (token_version is None):
        response.data = {'token_version': 'token version not exist'}
    refresh_token = generate_refresh_token(user, token_version)

    response.set_cookie(key='refreshtoken', value=refresh_token, httponly=True)
    try:
        headers = request.headers.items()
        tokens = ''
        for header in headers:
            if 'Cookie' in header:
                tokens = header[1]
                break
    except:
        tokens = 'error'
    response.data = {
        'access_token': access_token,
        'role': role,
        'author': author,
        'tokens': tokens
    }

    return response