Вход в систему с помощью интеграции Google с учетом того, что origin не разрешен на django
Я новичок в google sign in api, и я пытаюсь создать простое приложение, в котором пользователи регистрируются/входят в систему с помощью google one tap sign in, а затем видят свое имя и email. Я смог заставить google sign in работать как статическую веб-страницу на моем веб-сервере (apache), но как только я перенес его на django (я использую django для хранения электронной почты в базе данных), я получил ошибку:
[GSI_LOGGER]: The given origin is not allowed for the given client ID.
Я добавил url, привязанный к моему веб-серверу, в список авторизованных js origins, поэтому он работал как статическая страница с этого url, но он не работает при обслуживании через django. Является ли происхождение другим, когда оно исходит от django? Кроме того, я знаю, что есть способ достичь того, что я хочу, используя django social auth или django all auth, но я хочу получить вход одним касанием, используя этот код (в значительной степени основанный на этих документах от google: https://developers.google.com/identity/gsi/web/guides/migration , https://developers.google.com/identity/gsi/web/guides/handle-credential-responses-js-functions )
index.html:
<script src="https://accounts.google.com/gsi/client" async defer></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<div id="g_id_onload"
data-client_id=['my client id']
data-auto_select="true"
data-login_uri=['the url which was added to js origins']
data-callback="handleCredentialResponse">
</div>
<div class="g_id_signin" data-type="standard"></div>
<h4 id="name"></h4>
<h4 id="email"></h4>
<form method="POST">
{%csrf_token%}
<input type="hidden" value="" name="data" id="data"/>
</form>
<script>
function handleCredentialResponse(response) {
function parseJwt (token) {
var base64Url = token.split('.')[1];
var base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');
var jsonPayload = decodeURIComponent(window.atob(base64).split('').map(function(c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
return JSON.parse(jsonPayload);
};
const responsePayload = parseJwt(response.credential);
var name = document.getElementById('name');
var email = document.getElementById('email');
name.innerText = 'Full Name: ' + responsePayload.name;
email.innerText = "Email: " + responsePayload.email;
if (responsePayload.email.indexOf('@') > -1) {
$('#data').val(responsePayload.email)
}
}
</script>
views.py:
def store(request):
email = ''
if request.method == 'POST':
email = request.POST.get('data')
emailtomodel = Data(emails = email)
emailtomodel.save()
return render(request, 'index.html')
Любая помощь будет очень признательна!