TagoLine 0.1.4.15 → 0.1.4.18

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: b7388a0ce3ebc371e784733d9832a87190b925f93080b34d3de72958be15583e
4
- data.tar.gz: be17bcd1fe1a385c404a5734f5cd3c5c32d5bc08e32edf2a1dd8acf603a8143f
3
+ metadata.gz: d2822dff43c253a00bf8e8ebfbf62210a2c6dbbde7c7d352a822a259818f081a
4
+ data.tar.gz: 9263c410f67afdea2a3163fb295d96eec987e0ab465c1051604eedbaca4897bd
5
5
  SHA512:
6
- metadata.gz: d5adbdd711037454c455edaf4b93bb28d72d9be994cec26334612e8431660085efe8fd60986fb13e22c3bf1c3e7494fa3270ed9294007e37f4fdcce3ee516742
7
- data.tar.gz: dd963d37664c7ff004cc0e0709cfcef8d33f820824f7820de1812d33fa03c3027835a72955998ff2abecef479dfa9d65726b097e71d35824f0ccc92c54074f08
6
+ metadata.gz: d99e9cfbc7baf972a2366e534ad87463cd82eec1edb56c4d5bff43017f160d77bbffe0929c4418406ceb5702ecfcc38ac821e81d9fd8aa0a466ef7d268047063
7
+ data.tar.gz: 7275933c9aba124b4456c448696f930459ac9b660ab97e569178ddec766e15542e0ab17f0638fd85eaa66d559fdc61ae9772d06b0d13f0b7e525b43cc30f93da
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
 
@@ -5,14 +5,24 @@ require 'json'
5
5
  module TagoLine
6
6
  class LoginAction
7
7
 
8
- def self.loginProcess(controller)
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)
9
19
  if controller.session[:line_sub] && controller.session[:line_sub].length > 0
10
20
  return true
11
21
  end
12
22
 
13
23
  if stateIsRight(controller)
14
24
  res = getAccessToken(controller)
15
- getUserInfo(controller, res["id_token"])
25
+ getUserInfo(controller, res["id_token"], user_class=nil)
16
26
  return true
17
27
  else
18
28
  return false
@@ -24,12 +34,21 @@ module TagoLine
24
34
  end
25
35
 
26
36
 
27
- def self.getUserInfo(controller, id_token)
37
+ def self.getUserInfo(controller, id_token, user_class=nil)
28
38
  uri = URI('https://api.line.me/oauth2/v2.1/verify')
29
39
  res = Net::HTTP.post_form(uri,'id_token' => id_token , 'client_id' => ENV['LINE_CHANNEL_ID'])
30
40
  controller.session[:line_sub] = JSON.parse(res.body)["sub"]
31
41
  controller.session[:line_name]= JSON.parse(res.body)["name"]
32
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
+
33
52
  JSON.parse(res.body)
34
53
  end
35
54
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module TagoLine
4
- VERSION = "0.1.4.15"
4
+ VERSION = "0.1.4.18"
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.15
4
+ version: 0.1.4.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - manatago