コード例 #1
0
async def signup(form_data: EmailPasswordForm, request: Request,
                 background_tasks: BackgroundTasks):
    try:
        try:
            user = User(email=form_data.username, password=form_data.password)
        except NotUniqueError:
            user = User.objects.get(email=form_data.username,
                                    verified=False,
                                    created__lt=datetime.now() -
                                    timedelta(days=1))
            user.password = form_data.password
        if User.objects.count() == 0:
            user.admin = True
        user.hash_password()
        user.save()
        verify_token = create_access_token(str(user.id),
                                           expires_delta=timedelta(days=1))
        send_email_backround(
            background_tasks, 'Verify Your Email', [user.email],
            'verify_email.html', {
                'url':
                f'{request.client.host}:{request.client.port}/login?t={verify_token}',
            })
        # FOR DEBUG PURPOSES
        # TODO: remove in production
        print(request.client.host + ':' + request.client.port + '/login?t=' +
              verify_token)
        return {'id': str(user.id)}
    except DoesNotExist:
        raise UserAlreadyExistsError().http_exception
    except Exception as e:
        raise e