嗨,如果有人能在这里粘贴为他们的Django项目创建的Facebook登录代码,我将不胜感激,无论它是否是一个单独的应用程序,并提供一些解释。正在提取用户名、电子邮件和个人资料图片。谢谢
我花了一周的时间,但我很难实现Facebook登录。如果你不想在你的网站上使用第三方应用程序(对用户来说更安全、更值得信赖),以下是步骤:
-
在此处获取FB登录按钮:(https://developers.facebook.com/docs/facebook-login/web/login-button)。您可以在复制代码之前更改按钮的设置。
-
在此处获取javascript插件(https://developers.facebook.com/docs/facebook-login/web)。我建议复制示例并修改以下内容:
Javascript:
if (response.status === 'connected') {
// Logged into your app and Facebook.
FB.api('/me', {fields: 'name, email'}, function(response) {
console.log('Successful login for: ' + response.name);
document.getElementById("your_name2").value = response.name;
document.getElementById("your_email").value = response.email;
document.getElementById("myForm").submit();
document.getElementById('status').innerHTML =
'Thanks for logging in, ' + response.name + response.email + '!';});
登录并"连接"后,您需要更改您呼叫的信息。添加上面所需的{fields...}
。记录日志,看看它是否正常工作。
- 将2拉入的信息提交到隐藏表单中,以便将其发送到视图和模型。以下是表单(hells只是默认值):
表单模板:
<form action="{% url 'facebooklogin:register' %}" method="post" style="display: none;" id="myForm">
{% csrf_token %}
<label for="your_name">Your name: </label>
<input id="your_name2" type="text" name="your_name" value="helllllls">
<input id="your_email" type="text" name="your_email" value="helllllls">
<input type="submit" value="OK">
</form>
- 设置您的窗体、模型和视图,以便根据需要处理信息。获取个人资料图片,但只需在表单中添加一个ImageField即可
URL:
url(r'^registerfb/$', views.get_name, name='register')
视图:
def get_name(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = NameForm(request.POST)
# check whether it's valid:
if form.is_valid():
# process the data in form.cleaned_data as required
logger.error('Form is valid and running')
logger.error(request.POST.get('your_name'))
logger.error(request.POST.get('your_email'))
# redirect to a new URL:
return HttpResponseRedirect('/thanks/')
# if a GET (or any other method) we'll create a blank form
else:
form = NameForm()
return render(request, 'facebooklogin/name.html', {'form': form})
形式:
class NameForm(ModelForm):
class Meta:
model = FBUser
fields = ['your_name', 'your_email',]