TagoLine 0.1.4.14 → 0.1.4.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +41 -4
- data/lib/TagoLine/LoginAction.rb +38 -1
- data/lib/TagoLine/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1b81c8fe7ecfab61ea1b808b671197543a73eba31bdd8578305a7fa300d394ec
|
4
|
+
data.tar.gz: 7b1a59b58fae89c95488ee5da680c9b491d2968558d889f04461edbaa0396da5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d10060f91d2bfbb072fdc9df39f83f5f766923197f9013ac9f0cc0185fcb396d894987ea8cedf87e60c56ff4375bf06b1356a958dcb9678c651c6bf862e21f53
|
7
|
+
data.tar.gz: 5d88ef7208b8180bccc93e7765995527fb9a0b93b21a5c2ec5688f006db032cf032752d0d79696b5f784994970ea510d98f96223e4689b201af662aa6d34df2e
|
data/README.md
CHANGED
@@ -7,6 +7,35 @@ LINE_CHANNEL_ID
|
|
7
7
|
LINE_CHANNEL_SECRET
|
8
8
|
```
|
9
9
|
|
10
|
+
## このGemの基本理念
|
11
|
+
Line等のプラットフォームを使ってログインする場合は、できることは多い。
|
12
|
+
Lineでも普通は
|
13
|
+
- ログインする
|
14
|
+
- リダイレクトのURLパラメーターでcodeを受け取る
|
15
|
+
- codeをLineに送ってアクセストークン、リフレッシュトークン、idトークンなど色々受け取る。
|
16
|
+
- アクセストークンをすでに持っている時は、その有効性を確認する。
|
17
|
+
有効である場合は上のプロセスは実行しなくて良い
|
18
|
+
- idトークンも持っていれば上のプロセスは不要
|
19
|
+
- idトークンを送って個人情報を取得する
|
20
|
+
- アクセストークンを持っている場合はリフレッシュトークンを利用してアクセストークンを更新できる
|
21
|
+
|
22
|
+
とか、ものすごく複雑になる。
|
23
|
+
|
24
|
+
このGemではそんな面倒なことをせず
|
25
|
+
|
26
|
+
- ログインページからリダイレクト
|
27
|
+
- codeを受け取る
|
28
|
+
- idトークンを受け取り、それをLineに送る
|
29
|
+
- アカウントの情報を受け取る
|
30
|
+
だけをやることにした。
|
31
|
+
|
32
|
+
CSRF対策になるようにstateのチェックはしているがnoceなどは使っていない。
|
33
|
+
|
34
|
+
|
35
|
+
# 使い方
|
36
|
+
|
37
|
+
基本的な使い方は次の2つだけです
|
38
|
+
|
10
39
|
## ログインボタン
|
11
40
|
ビューの中でこう書きます。
|
12
41
|
```
|
@@ -14,10 +43,18 @@ LINE_CHANNEL_SECRET
|
|
14
43
|
```
|
15
44
|
セッションを使うため、引数にcontrollerが必要です
|
16
45
|
|
17
|
-
##
|
46
|
+
## ログインのプロセス
|
18
47
|
```
|
19
|
-
TagoLine::LoginAction.
|
48
|
+
TagoLine::LoginAction.loginProcess(self)
|
20
49
|
```
|
21
|
-
|
22
|
-
|
50
|
+
リダイレクト先のコントローラーのアクションでまずこのように書く。
|
51
|
+
|
52
|
+
こうすると
|
53
|
+
sessionの中にline_sub,line_name,line_pictureが入ります。
|
54
|
+
|
55
|
+
また、これ以外にもlogoutProcessを用意しており、そこでセッションの中身をクリアします
|
56
|
+
|
57
|
+
|
58
|
+
|
59
|
+
|
23
60
|
|
data/lib/TagoLine/LoginAction.rb
CHANGED
@@ -4,14 +4,51 @@ require 'json'
|
|
4
4
|
|
5
5
|
module TagoLine
|
6
6
|
class LoginAction
|
7
|
+
|
8
|
+
def self.logoutProcess(controller,user_class=nil)
|
9
|
+
controller.session.delete(:line_sub)
|
10
|
+
controller.session.delete(:line_name)
|
11
|
+
controller.session.delete(:line_picture)
|
12
|
+
controller.session.delete(:line_state)
|
13
|
+
if(user_class != nil)
|
14
|
+
controller.session.delete(:user_id)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.loginProcess(controller,user_class=nil)
|
19
|
+
if controller.session[:line_sub] && controller.session[:line_sub].length > 0
|
20
|
+
return true
|
21
|
+
end
|
22
|
+
|
23
|
+
if stateIsRight(controller)
|
24
|
+
res = getAccessToken(controller)
|
25
|
+
getUserInfo(controller, res["id_token"], user_class=nil)
|
26
|
+
return true
|
27
|
+
else
|
28
|
+
return false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
7
32
|
def self.stateIsRight(controller)
|
8
33
|
controller.session[:line_state] == controller.params[:state]
|
9
34
|
end
|
10
35
|
|
11
36
|
|
12
|
-
def self.getUserInfo(id_token)
|
37
|
+
def self.getUserInfo(controller, id_token, user_class=nil)
|
13
38
|
uri = URI('https://api.line.me/oauth2/v2.1/verify')
|
14
39
|
res = Net::HTTP.post_form(uri,'id_token' => id_token , 'client_id' => ENV['LINE_CHANNEL_ID'])
|
40
|
+
controller.session[:line_sub] = JSON.parse(res.body)["sub"]
|
41
|
+
controller.session[:line_name]= JSON.parse(res.body)["name"]
|
42
|
+
controller.session[:line_picture]= JSON.parse(res.body)["picture"]
|
43
|
+
|
44
|
+
if user_class != nil
|
45
|
+
user = user_class.find_or_initialize_by(line_sub: controller.session[:line_sub])
|
46
|
+
user.line_name = controller.session[:line_name]
|
47
|
+
user.line_picture = controller.session[:line_picture]
|
48
|
+
user.save
|
49
|
+
controller.session[:user_id] = user.id
|
50
|
+
end
|
51
|
+
|
15
52
|
JSON.parse(res.body)
|
16
53
|
end
|
17
54
|
|
data/lib/TagoLine/version.rb
CHANGED