使用django-allauth实现LINE登录

Django-allauth的信息太少了!

特别是LINE的信息非常少。即使查看官方文件,也只有一些指向LINE开发者页面的链接。甚至不允许努力阅读英语。当然,因此我遇到了困难,所以我会记下需要注意的事项。

模块安装周边。

首先,让我们安装模块。我们需要安装Django和Django-allauth。

pip install django
pip install django-allauth

创建django项目

我们给创建的项目取名为“line”,登录的应用程序取名为“login”。

django-admin startproject line
django-admin startapp login

创建应用程序后,首先访问Django的起始页面。

python manage.py runserver
2019-07-24-1.PNG

项目的设置等等

从这里开始,我们将开始实施Line登录。

settings.py 的设置

打开settings.py文件,并进行设置。
设置的内容如下:

    • 作成したloginアプリケーションの登録

 

    • django-allauth周りの設定

 

    • login後、logout後のリダイレクトの設定

 

    日本語化(いらないと思うけどねんのため)

(省略)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.sites',                         #追加
    'login',                                        #追加
    'allauth',                                      #追加
    'allauth.account',                              #追加
    'allauth.socialaccount',                        #追加
    'allauth.socialaccount.providers.line',         #追加

]

(省略)

# Internationalization
# https://docs.djangoproject.com/en/2.2/topics/i18n/

LANGUAGE_CODE = 'ja-JP'         #変更

TIME_ZONE = 'Asia/Tokyo'        #変更

USE_I18N = True

USE_L10N = True

USE_TZ = True

(省略 ここから下は全部追加)
######################################
# Authentication                     #
######################################

# Don't forget this little dude.
SITE_ID = 1

# ログインのリダイレクトURL
LOGIN_REDIRECT_URL = '/'

# ログアウトのリダイレクトURL
ACCOUNT_LOGOUT_REDIRECT_URL = '/'

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    "allauth.account.auth_backends.AuthenticationBackend",
)

SOCIALACCOUNT_PROVIDERS = {
    'line': {
        'SCOPE': ['profile','openid'],
    }
}

这里遇到的问题是,要进行Line登录,scope的设置非常重要,如果没有SOCIALACCOUNT_PROVIDERS的设置,它就无法正常工作。

添加URL

注册line项目的访问URL。
包含login应用程序和allauth的urls.py文件。
这样就可以访问两个应用程序的URL了。

from django.contrib import admin
from django.urls import include,path            # includeを追加

urlpatterns = [
    path('admin/', admin.site.urls),
    path('auth/', include('allauth.urls')),     # 追加
    path('', include('login.urls')),             # 追加
]

创建用于访问的页面

由于django-allauth已为登录提供了视图和模板,所以我们只需要访问它即可。然而,我们想要创建一个可用于确认登录的重定向页面,因此我们会自己来制作。

创建login/urls.py文件

因为startapp命令无法创建urls.py,所以您需要手动创建这个文件。

from django.urls import path
from . import views

# set the application namespace
# https://docs.djangoproject.com/en/2.0/intro/tutorial03/
app_name = 'login'

urlpatterns = [
    # ex: /
    path('', views.top, name='top'),
 ]

在login/views.py中的修改

由于views.py已经存在,因此我们将直接使用它。

from django.shortcuts import render

# Create your views here.

def top(request):
    """トップ画面"""
    return render(request,
                  'top.html')

创建用于展示的模板。

在登录文件夹下创建一个名为templates的文件夹,并在其中创建一个名为top.html的文件。文件内容可以很简单,无妨。

<a href="{% url 'line_login' %}">lineでログイン</a>

{% if user.is_authenticated %}
<p>ログイン済</p>

<a href="{% url 'account_logout' %}">ログアウト</a>
{% endif %}

一般而言,首先在首页只有一个用于Line登录的链接。登录后会重定向到首页,首页会显示“已登录”字样,表明用户已通过身份验证,并显示注销链接。

创建数据库并创建超级用户

进行迁移,创建一个超级用户登录管理站点。

python manage.py makemigrations
python manage.py migrate
python manage.py create
python manage.py createsuperuser
ユーザー名 (leave blank to use '*****'):
メールアドレス:
Password:
Password (again):

创建LINE登录

让我们创建一个LINE登录。
首先,请访问下一页,并使用您的LINE帐户登录。

创建供应商

请继续登录,进入下一个页面后,请点击”创建新供应商”。

2019-10-05_4.PNG
2019-10-05_1.PNG

创建新频道

2019-10-05_2.PNG
2019-10-05_lsegjpoi4.PNG

设置Web登录的重定向地址

2019-10-05_5.PNG

到这一步,暂时可以说LINEDeveloper的设置结束了。

将LINE登录注册到Django的管理网站中。

走吧,就差最后一口气了。进入Django的管理网站,并访问外部账户的社交应用程序。

2019-10-05_6.PNG

当您访问时,请选择右上方的椭圆形SOCIAL APPLICATION,并显示新应用选择画面。

2019-10-05_7.PNG

请在”网站”栏中选择example.com,并点击箭头将选定的网站移动到相应位置(就像图片中所示的样子)。

立即访问!

现在一切准备就绪!首先运行runserver命令,在本地主机上搭建服务器。

python manage.py runserver
2019-10-05_8.PNG
2019-10-05_9.PNG

按下登录按钮后,将被回调到原始Web应用程序,并且会被转到设置为LOGIN_REDIRECT_URL路径(在这里是跳转到首页)。

2019-10-05_10.PNG

我认为将显示首页,显示已登录状态和显示用于登出的链接。

結束了

我在django-allauth中成功实现了LINE登录功能,您可以尝试将其集成到您自己使用的WEB应用中。

bannerAds