Giter Club home page Giter Club logo

django-social-login's Introduction

django-social-login

用第三方帐号登录网站

Usage

install

pip install django-social-login

settings.py

下面几项是必要的设置,必须在项目 settings.py 中设置好。 此外还有一些非必要的设置,见这里

  • social_login 加入到 INSTALLED_APPS

  • 设置项目urls.py

    url(r'', include('social_login.urls')) 放到 项目urls.py 的 最下面

    urlpatterns = patterns('',
        url(r'^admin/', include(admin.site.urls)),
        # ...
        url(r'', include('social_login.urls')),
    )
  • SOCIALOAUTH_SITES

    要使用的提供OAuth2服务的站点信息,见 socialoauth文档

  • SOCIAL_LOGIN_USER_INFO_MODEL

    用户信息的model,例如你的app名叫 myapp, 存储用户信息的model叫 UserInfo, 那么这里就设置为 SOCIAL_LOGIN_USER_INFO_MODEL='myapp.UserInfo'

    用户信息表的定义见下面的 说明

  • SOCIAL_LOGIN_ERROR_REDIRECT_URL

    在用户认证过程中发生错误(用户拒绝授权等)时要跳转到的url

  • 'social_login.context_processors.social_sites'

    把它加入到 TEMPLATE_CONTEXT_PROCESSORS 中, 并且在 views 中传递了 context_instance, 那么在模板中就可以通过 {% for s in social_sites %} 的形式在获得配置的站点信息

    s.site_id       在 SOCIALOAUTH_SITES 中配置的 site_id
    s.site_name     站点的 英文名字
    s.site_name_zh  中文名字
    s.authorize_url 引导用户授权的url
    
  • 'social_login.middleware.SocialLoginUser'

    把它加入到 MIDDLEWARE_CLASSES 中, 这样在每个 view 的 request 对象会有一个 siteuser 属性

    如果设置了 siteuser.is_active = False,那么此用户是无法登录的, request.siteuser 判断为None

    可以通过 if request.siteuser 来判断是否有用户登录。 如果有 那么 request.siteuser 是一个 social_login.SiteUser 对象

    可以通过一下方法访问其属性:

    request.siteuser.id                     用户uid
    request.siteuser.is_social              是否是第三方帐号
    request.siteuser.date_joined            用户加入时间
    request.siteuser.user_info.XX           用户信息表中的XX列
    
    request.siteuser.inner_user.XX          XX是定义在自身网站用户登录认证表中的field
    
    # if request.siteuser.is_social is True
    request.siteuser.social_user.site_uid   用户第三方站点中的uid
    request.siteuser.social_user.site_id    用户来自哪个网站的site_id
    

models.py

你的项目至少需要定义两个用户表:

  • 自身网站注册用户的认证表 - 用来保存自身注册用户
  • 用户信息表 - 保存所有用户信息。

example:

from social_login.abstract_models import AbstractInnerUserAuth, AbstractUserInfo

class UserAuth(AbstractInnerUserAuth):
    email = models.CharField(max_length=255, unique=True)
    password = models.CharField(max_length=128)
    
    
class UserInfo(AbstractUserInfo):
    pass

对于 AbstractInnerUserAuthAbstractUserInfo 的定义可以直接看 源码

此外,你还可以 扩展 siteuser 表,只要自己定义的表 继承自 social_login.abstract_models.AbstractBaseSiteUser 并且 设置了 abstract = True ,然后在 settings.py 加入 SOCIAL_LOGIN_ABSTRACT_SITEUSER = 'yourapp.YourCustomAbstractSiteUser' 即可 可以参考 example/app/models.py 最下面注释掉的部分

经过上面的设置后, python manage.py validate 无错误就 python manage.py syncdb, python manage.py runserver. 如果有错,请确保正确安装,并且正确设置。完整的例子请参考 example

Login process

第三方登录和自己网站内部注册/登录的流程如下:

  • 当用户点击login后,提供两个选择:

    • 使用已经注册的帐号登录
    • 使用第三方帐号登录

    login

  • 用户可以先 注册 ,并且用此帐号登录,也可以用第三方帐号登录。

    登录一些用户后的状态如下图:

    图中显示了登录过的用户信息,注意 uid为 5 和 6 的用户, 他们来自不同的网站,但用户名却相同。 所以在userinfo表中的 username 不能设置为 unique=True

    status

完整的流程可以 运行 example 中的项目

Optional Settings

SOCIAL_LOGIN_UID_LENGTH

保存用户第三方站点uid的Field是一个 CharField,这个设置用来指定此 CharField的 max_length。 默认255

SOCIAL_LOGIN_CALLBACK_URL_PATTERN

用户认证结束后的回调地址,必须与 在OAuth2服务认证时提供的 redirect_uri 相匹配

默认设置为 r'account/oauth/(?P<sitename>\w+)/?$'

对应的 SOCIALOAUTH_SITES 设置见 doc.md

SOCIAL_LOGIN_DONE_REDIRECT_URL

用户认证成功后的跳转地址。默认为 '/'

如果用户是第一次登录,那么会为其分配一个新的内部uid, 如果以前已经登录过了,就获取其内部uid,然后将次uid设置到 session 中。 最后跳转到 SOCIAL_LOGIN_DONE_REDIRECT_URL

SOCIAL_LOGIN_SITEUSER_SELECT_RELATED

一个siteuser对象有三个 关联关系,(三个关联表)

  • inner_user - 网站自身注册用户
  • social_user - 第三方帐号
  • user_info - 用户信息

所以你可以通过 request.siteuser.inner_user, request.siteuser.social_user, request.siteuser.user_info 来访问相应的数据。

这个就是配置 request.siteuser 在获取的时候,关联join哪几个表, 默认是 user_info, 因为获取用户信息是很频繁的操作。

你可以这样自定义: SOCIAL_LOGIN_SITEUSER_SELECT_RELATED = ('user_info', 'social_user', 'inner_user')

SOCIAL_LOGIN_ENABLE_ADMIN

是否开启 social_login 的admin。默认为开启。开启后的界面如下图:

admin

django-social-login's People

Contributors

yueyoum avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

django-social-login's Issues

安装成功后安装目录的\Lib\site-packages\social_login\views.py文件有错误

-- coding: utf-8 --

from django.http import HttpResponseRedirect

from django.db.models import get_model

修改导入模块

from django.apps import apps

找不到socialsites,应为SocialSites

from socialoauth import SocialSites
from socialoauth.utils import import_oauth_class
from socialoauth.exception import SocialAPIError

from .models import SocialUser

from .app_settings import (
SOCIALOAUTH_SITES,
SOCIAL_LOGIN_USER_INFO_MODEL,
SOCIAL_LOGIN_DONE_REDIRECT_URL,
SOCIAL_LOGIN_ERROR_REDIRECT_URL,
)

不能直接使用SocialSites.config()

SocialSites(SOCIALOAUTH_SITES)

环境:diango1.9+python2.7

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.