简体   繁体   中英

Authentication failed in Github | python-social-auth

In my django project I use python-social-auth . I am tring to add social login with Github but unfortunately have next error :

Authentication failed: The redirect_uri MUST match the registered callback URL for this application.

Full error looks like this:

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

I registered application in Github and set set the callback URL as http://localhost:8000/complete/github/ .

settings.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/

The problem was with callback URL of Github. In my case I had language prefix inside URL, didnt expect that Github would be sensitive to that cause other provideres didnt raise error for link without prefix. I fount this post which describe how to show default language without path prefixes. I hope it will help someone who would face with such problem.

Pichkasik is right.

In the GitHub website, under application setting, change "localhost" with "127.0.0.1" and it works for me.

Github上的授权回调url设置

In the documentation

Register a new application at GitHub Developers , set the callback URL to http://example.com/complete/github/ replacing example.com with your domain. This will generate a Client Key and a Client Secret.

Thing is, it's not http://example.com/complete/github/ for everyone.


Let's say you're developing locally and you have the following in your urls.py

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

then you'll need to add in your Authorization callback URL the following

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

在此处输入图像描述

You can then do something like this in your template

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

I use http://127.0.0.1:8000 instead http://localhost:8000,and it works! enter image description here

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM