TagoLine 0.1.4.15 → 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: b7388a0ce3ebc371e784733d9832a87190b925f93080b34d3de72958be15583e
4
- data.tar.gz: be17bcd1fe1a385c404a5734f5cd3c5c32d5bc08e32edf2a1dd8acf603a8143f
3
+ metadata.gz: 1b81c8fe7ecfab61ea1b808b671197543a73eba31bdd8578305a7fa300d394ec
4
+ data.tar.gz: 7b1a59b58fae89c95488ee5da680c9b491d2968558d889f04461edbaa0396da5
5
5
  SHA512:
6
- metadata.gz: d5adbdd711037454c455edaf4b93bb28d72d9be994cec26334612e8431660085efe8fd60986fb13e22c3bf1c3e7494fa3270ed9294007e37f4fdcce3ee516742
7
- data.tar.gz: dd963d37664c7ff004cc0e0709cfcef8d33f820824f7820de1812d33fa03c3027835a72955998ff2abecef479dfa9d65726b097e71d35824f0ccc92c54074f08
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
 
@@ -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.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.15
4
+ version: 0.1.4.17
5
5
  platform: ruby
6
6
  authors:
7
7
  - manatago