基于OAuthlib请求的Django社交帐户身份验证应用程序。

django-simple-socialauth的Python项目详细描述


###概述

这个社交认证django应用程序是建立在巨人的肩膀上的:特别是优秀的[`requests oauthlib`](https://github.com/requests/requests-oauthlib)和[`requests`](https://github.com/kennethreitz/requests)模块。/OAuth2提供程序身份验证
*避免复杂性,方法是:
*包装现有的、受信任的和稳定的模块
*让开发人员处理自己的"用户"模型决策和非社交登录/注册


这将根据需要自动安装"requests oauthlib"(以及它需要的任何模块)。当然,很明显,您需要django本身。

设置.py `:


```
authentication-backend s=(
'django.contrib.auth.backends.backends.modelbackend',
'simple-socialauth.backends.backends.backend'

````



最后,将"simple-socialauth"url模式添加到项目的url.py `:

````



url模式=[

url(r'^oauth/',include('simpleu socialauth.url s'),

]
````

运行迁移:

``````
python manage.py migrate
`````

例如[Facebook的开发者站点](https://developer s.facebook.com/)或[Twitter的开发者站点](https://dev.twitter.com/)。

le socialauth将创建一个新的"user",并用它从社交提供商的api中检索的数据填充first、last、email和username字段。如果可能,"django simple socialauth"将跳过"完成表单"步骤(如果检索到所有必需的信息),否则它将显示给用户,以便在"用户"创建之前根据需要收集电子邮件和用户名。

/(models.py)表示社交提供商(如Facebook、Twitter等)唯一ID和用户访问/刷新令牌数据的实例。"socialaccount"显然是通过外键与新的"user"关联的。

最后,发送"connect"信号。这是开发人员连接到社交用户注册过程的一个机会。


"登录"信号被发送,允许开发人员连接到社交用户登录过程中。


好的,等等,假设facebook social account对象
``
查看模块的[`settings`](https://github.com/jaddison/django-simle-socialauth/blob/master/simple_socialauth/settings.py)我们找到以下配置选项:

**`simple_socialauth_login_success_redirect_url`**

默认为"login_redirect_url"(如果已设置),否则为`/`.

**"simple_socialauth_login_error_redirect_url`**

默认为`/`.

**`simple_socialauth_siteroot`**


格式化OAuth URL(即回调等)时要使用的域(如www.example.com`)。默认为"site.objects.get_current().domain"。

**`simple_socialauth_secure`**

此设置仅在未设置"simple_socialauth_siteroot"时使用。在这种情况下,"site.objects.get_current().domain"用于OAuth回调,但要形成正确的URL,我们需要知道它是否应该是"http"与"https"。默认为"true"。

**"simple_socialauth_generate_username`**

如果为true,则当需要创建新的django"user"时,"django simple socialauth"将自动生成唯一的用户名。默认为"false",这将导致用户看到一个"Complete Your Registration"页面,其中包含用户名和电子邮件地址的表单。

'将显示表单。

**`Simple_SocialAuth_Providers`**

此设置指示启用了哪些社交提供程序模块。默认为`()`(即未启用提供程序)。此设置与"简单SocialAuth提供程序设置"一起使用,这意味着您需要在其中添加相应的设置。启用提供程序很简单-在Django项目"settings.py"中,要同时启用Facebook和Twitter,只需添加:

````
simple`socialauth`providers=(
'simple`socialauth.providers.facebook.facebookprovider',
'simple`socialauth.providers.twitter.twitterprovider'
````

请注意,这种启用providd的方法ers允许开发人员[创建自定义社会提供者](自定义提供者)。

假设facebook(oauth2)和twitter(oauth1)提供程序已启用,则配置它们的设置的方式如下:

````
简单的socialauth提供程序设置={
"twitter":{
"init params":{
"client key":"twitter key"、
"client secret":"twitter secret"
}、
'授权参数':{},
'回调参数':{}
},
'facebook':{
'初始参数':{
'客户端ID':'facebook-client ID',
'作用域':['电子邮件','公共配置文件','用户朋友']


'授权参数:{},
'回调参数':{
'client_secret':'facebook-client_secret'
}
}
}
````

>注意,授权'scope'也可以在每个提供程序的'init_params'中设置。每个提供商的"scope"选项的详细信息不在本文档的范围内,可能会有所更改。


所有基于OAuth2的提供商都将遵循上面Facebook示例所示的格式。基于oauth1的提供者将遵循上面twitter所示的示例。



这将允许用户跳过繁琐的"完成表单"步骤,该步骤要求用户填写这些字段。

included social providers<;a name='provider-list'>;<;/a>;


除非指明:

*`facebook`:`simple_socialauth.providers.facebook.facebook provider`
*`twitter`:`simple_socialauth.providers.twitter.twitterprovider`(**oauth1**)
*`github`:`simple_socialauth.providers.g,否则所有都是oauth2itsub.githubprovider`
*`pinterest`:`simple_socialauth.providers.pinterest.pinterestprovider`
*`google`:`simple_socialauth.providers.google.google.googleprovider`
*`linkedin`:`simple_socialauth.providers.linkedin.linkedinprovider`
*`angellist`:`simple撸socialauth.providers.angellist。angelListProvider`


\有些不完全符合OAuth1/2,因此"requests oauthlib"有许多[符合性修复程序](https://github.com/requests/requests oauthlib/tree/master/requests_oauthlib/compliance_fixes)。例如,该项目使用[Facebook]修复程序(https://github.com/jaddison/django-simple-socialauth/blob/master/simple-socialauth/providers/facebook.py)和[LinkedIn]修复程序(https://github.com/jaddison/django-simple-socialauth/blob/master/simple-socialauth/providers/linkedin.py)。

自定义提供程序非常简单-让我们看看[Github提供程序](https://github.com/jaddison/django-simple-socialauth/blob/master/simple_socialauth/provider s/github.py)来了解其中涉及的内容:

`````
from.base import base provider



class githubprovider(baseprovider):
类型='github'

def\uu init\uu(self,**kwargs):
self.authorization\u url='https://github.com/login/oauth/authorize'
self.access\u token\u url='https://github.com/login/oauth/access\u token'
self.user\u api\u url='https://api.github.com/user'
super(githubprovider,self).=name.split('',1)
返回{
"源数据":数据,
"uid":uid,
"用户名":数据。get('login','',
"电子邮件":数据。get('email','',
"公司":数据。get('company','',
"组织URL":data.get("组织URL","")、
"存储库URL":data.get("存储库URL","")、
"名称":name,
"名字":name\u split[0],
"姓氏":name\u split[1]如果len(name\u split)>;1否则"
}
return{}
```

>每个提供程序都必须继承自'baseprovider',并且需要一个唯一的'type'值。

这对于名称不容易用大小写进行标题的提供程序很有用,例如"linkedin"(注意大写字母"i")。


必须设置适当的oauth1/2 url:

*`authorization\u url`(oauth1/2)
*`access\u token\u url`(oauth1/2)
*`request\u token\u url`(仅限oauth1-请参阅[twitter提供程序](https://github.com/jaddison/django simple socialauth/blob/master/simple_socialauth/provider s/twitter.py))
*`user_api_url`(oauth1/2)


在通过提供程序成功进行用户身份验证后,应在提供程序的"初始化"末尾完成任何符合性修复。

jango simple socialauth`调用提供程序的'get_social_user_info()'方法,该方法从社交提供程序的经过身份验证的api中检索关键用户特定信息。此方法应在"dict"中返回以下信息(如果可用):

*`uid'社交提供商在其系统中为用户提供的唯一ID(要求!)
*`用户名`
*`电子邮件`
*`名字`
*`姓氏`

此信息用于创建django"用户"。



欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
正则表达式使用Java从服务器截断文本   micronaut微服务的java内存消耗   如果私有函数需要相同的输入,java应该在公共函数中显式执行异常检查   为什么我们在java中使用抽象类和抽象方法   Java中接受外来字母的字符串?   cordova Android:ClassNotFoundException,包括ZXing   通过LiveData observer向特定索引添加项时出现java IndexOutOfBoundsException   jsp Java从两个源调用一个servlet   java如何设置网格布局中按钮的位置?   java HashMap返回方法   java JDK错误版本   java如何将现有类集成到新的Swing项目中   java如何在扫描程序位于输入端时使for循环停止   java正则表达式匹配空白表   java组织。格拉德尔。工具。BuildException:设置的代码长度无效   JList中的swing Java格式化字符串   javabeans如何将JavaBean属性映射到另一个名称以进行输出?   ajax请求后的java Rerender RichFaces错误消息