簡體   English   中英

Github 認證失敗 | 蟒蛇社交認證

[英]Authentication failed in Github | python-social-auth

在我的 django 項目中,我使用python-social-auth 我正在嘗試使用 Github 添加社交登錄,但不幸的是有下一個錯誤

身份驗證失敗:redirect_uri 必須與為此應用程序注冊的回調 URL 匹配。

完整錯誤如下所示:

Traceback (most recent call last):
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\exception.py", line 39, in inner
    response = get_response(request)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 187, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\core\handlers\base.py", line 185, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\views\decorators\cache.py", line 57, in _wrapped_view_func
    response = view_func(request, *args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\django\views\decorators\csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\social_django\utils.py", line 50, in wrapper
    return func(request, backend, *args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\social_django\views.py", line 28, in complete
    redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\social_core\actions.py", line 41, in do_complete
    user = backend.complete(user=user, *args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\social_core\backends\base.py", line 39, in complete
    return self.auth_complete(*args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\social_core\utils.py", line 253, in wrapper
    return func(*args, **kwargs)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\social_core\backends\oauth.py", line 386, in auth_complete
    self.process_error(self.data)
  File "C:\Users\Nurzhan\AppData\Local\Programs\Python\Python35-32\lib\site-packages\social_core\backends\oauth.py", line 379, in process_error
    data['error'])
social_core.exceptions.AuthFailed: Authentication failed: The redirect_uri MUST match the registered callback URL for this application.
[27/Feb/2017 16:06:53] "GET /ru/complete/github/?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fv3%2Foauth%2F%23redirect-uri-mismatch&state=fEheCJ4QPZZuz7qHPQUKxvMWl2Rw4xTV HTTP/1.1" 500 105176

我在 Github 注冊了應用程序,並將回調 URL 設置為http://localhost:8000/complete/github/

設置.py

INSTALLED_APPS = [
    ***
    'social_django',  # python-social-auth
]

AUTHENTICATION_BACKENDS = (
    'social_core.backends.github.GithubOAuth2',
    'django.contrib.auth.backends.ModelBackend',
)

SOCIAL_AUTH_GITHUB_KEY = 'CLIENT ID'
SOCIAL_AUTH_GITHUB_SECRET = 'Client Secret'

MIDDLEWARE = [
   ***
   'social_django.middleware.SocialAuthExceptionMiddleware',
]

TEMPLATES = [
    {
        ***
        'OPTIONS': {
            'context_processors': [
                ***
                'social_django.context_processors.backends',
                'social_django.context_processors.login_redirect',
            ],
        },
    },
]

SOCIAL_AUTH_PIPELINE = (
    'social.pipeline.social_auth.social_details',
    'social.pipeline.social_auth.social_uid',
    'social.pipeline.social_auth.auth_allowed',
    'social.pipeline.social_auth.social_user',
    'social.pipeline.user.get_username',
    'social.pipeline.mail.mail_validation',
    'social.pipeline.social_auth.associate_by_email',
    'social.pipeline.user.create_user',
    'social.pipeline.social_auth.associate_user',
    'social.pipeline.social_auth.load_extra_data',
    'social.pipeline.user.user_details'
)

嘗試在http://127.0.0.1:8000/上注冊回調 URL,而不是http://localhost:8000/

問題出在 Github 的回調 URL 上。 就我而言,我在 URL 中有語言前綴,沒想到 Github 會對此敏感,導致其他提供者沒有為沒有前綴的鏈接引發錯誤。 我找到了這篇文章,它描述了如何在沒有路徑前綴的情況下顯示默認語言。 我希望它會幫助那些面臨這樣問題的人。

皮奇卡西克是對的。

在 GitHub 網站中,在應用程序設置下,將“localhost”更改為“127.0.0.1”,它適用於我。

Github上的授權回調url設置

文檔中

GitHub Developers注冊一個新的應用程序,將回調 URL 設置為http://example.com/complete/github/將 example.com 替換為您的域。 這將生成一個客戶端密鑰和一個客戶端密鑰。

事情是,它不是每個人的http://example.com/complete/github/


假設您正在本地開發並且您的 urls.py 中有以下內容

path('social/', include('social_django.urls', namespace='social')),

那么您需要在授權回調 URL中添加以下內容

http://localhost/social/complete/github/

在此處輸入圖像描述

然后你可以在你的模板中做這樣的事情

<a href="{% url 'social:begin' 'github' %}">GitHub</a>

我使用http://127.0.0.1:8000而不是 http://localhost:8000,它可以工作! 在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM