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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a76b81291fa6f7ae8dffefade3facc1e3470bd61190706bdf6d569bdc1c8af4d
4
- data.tar.gz: babc61f711f92ddc53e369c38d02c62e314a25c21bc08097220e30987f9fb952
3
+ metadata.gz: 1b81c8fe7ecfab61ea1b808b671197543a73eba31bdd8578305a7fa300d394ec
4
+ data.tar.gz: 7b1a59b58fae89c95488ee5da680c9b491d2968558d889f04461edbaa0396da5
5
5
  SHA512:
6
- metadata.gz: c2ccf1d973a9546a4f8bc96839736276edb4bfb66f4c213a20c4365c4536a4229e216144872f00651281af7920b3f825e1620b355f54ae9d523e51f298e283dc
7
- data.tar.gz: 3b3853cc1d944b32aad97f2d0f61ab0e270c20b6619f7430d4e0e17b74b31a5970591f0defcf1aab0fbc5f32e6cdccb2528d0f5ee3395b0cfa8a5bbdd8926b78
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
- ## CSRFのチェック
46
+ ## ログインのプロセス
18
47
  ```
19
- TagoLine::LoginAction.stateIsRight(self)
48
+ TagoLine::LoginAction.loginProcess(self)
20
49
  ```
21
- コントローラー内でこのように書く。
22
- URLのパラメーターにあるstateとsession[:line_state]を比較した結果を返す
50
+ リダイレクト先のコントローラーのアクションでまずこのように書く。
51
+
52
+ こうすると
53
+ sessionの中にline_sub,line_name,line_pictureが入ります。
54
+
55
+ また、これ以外にもlogoutProcessを用意しており、そこでセッションの中身をクリアします
56
+
57
+
58
+
59
+
23
60
 
@@ -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
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TagoLine
4
- VERSION = "0.1.4.14"
4
+ VERSION = "0.1.4.17"
5
5
  CALLBACK_URL = ENV["LINE_CALLBACK_URL"]
6
6
  CHANNEL_ID = ENV["LINE_CHANNEL_ID"]
7
7
  CHANNEL_SECRET = ENV["LINE_CHANNEL_SECRET"]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: TagoLine
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4.14
4
+ version: 0.1.4.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - manatago