galapagos_mobile 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -6,9 +6,9 @@ jpmobileプラグインを使用した場合に発生する不具合を解消す
6
6
 
7
7
  以下の環境で動作確認
8
8
 
9
- * Rails : 3.0.4
10
- * jpmobile : 0.1.4
11
- * devise : 1.1.5 〜 1.1.6 (利用する場合)
9
+ * Rails : 3.0.4 〜 3.0.6
10
+ * jpmobile : 0.1.4 〜 1.0.0.pre
11
+ * devise : 1.1.5 〜 1.1.8 (利用する場合)
12
12
 
13
13
  ## install
14
14
 
@@ -36,10 +36,31 @@ setupメソッドを実行
36
36
  $ rails plugin install git://github.com/matsuda/galapagos_mobile.git
37
37
 
38
38
 
39
+ ## Deviseを使用する場合
40
+
41
+ deviseの初期設定した際に生成される設定ファイル(devise.rb)に以下を設定
42
+
43
+ # /config/initializers/devise.rb
44
+ Devise.setup do |config|
45
+ ...
46
+ config.warden do |manager|
47
+ manager.failure_app = GalapagosMobile::FailureApp
48
+ end
49
+ end
50
+
51
+ FailureAppをカスマイズする場合は、
52
+
53
+ class CustomFailureApp < GalapagosMobile::FailureApp
54
+ end
55
+
56
+ を継承して上記のwarden managerにセットする。
57
+
39
58
  ## 実装されている機能
40
59
 
41
60
  * Cookie非対応の携帯でログイン処理を可能にする。
42
61
 
43
- * Deviseプラグインを利用している場合に authenticate_{scope}! メソッドで invalidだった場合にsession_idを引き継がせる。
62
+ ### deviseを使用している場合
44
63
 
45
- login画面へのリダイレクト時にsession_idを付与し、login後に元の画面へリダイレクトバックする時に古いsession_idを削除する。
64
+ * login画面へのリダイレクト時にsession\_idを付与
65
+ * login後に元の画面へリダイレクトバックする時に古いsession\_idを削除する。
66
+ * authenticate_{scope}! メソッドで invalidだった場合にsession\_idを引き継がせる。
@@ -2,44 +2,6 @@
2
2
  # monkey patching for jpmobile 0.1.4 + devise 1.1.6
3
3
  module GalapagosMobile
4
4
  module Devise
5
- module FailureApp
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- class_inheritable_accessor :trans_sid_mode
10
- # Set trans_sid_mode if you want to use others.
11
- # ex. ::Devise::FailureApp.trans_sid_mode = :always
12
- # in config/initializers/galapagos_mobile.rb
13
- self.trans_sid_mode = :mobile
14
- end
15
-
16
- module InstanceMethods
17
- # from jpmobile/trans_sid.rb -v 0.1.4
18
- protected
19
- # URLにsession_idを追加する。
20
- def default_url_options
21
- result = super || {}
22
- return result unless request # for test process
23
- return result unless apply_trans_sid?
24
- return result.merge({session_key => jpmobile_session_id})
25
- end
26
-
27
- private
28
- # session_keyを返す。
29
- def session_key
30
- unless key = Rails.application.config.session_options.merge(request.session_options || {})[:key]
31
- key = ActionDispatch::Session::AbstractStore::DEFAULT_OPTIONS[:key]
32
- end
33
- key
34
- end
35
-
36
- # session_idを返す
37
- def jpmobile_session_id
38
- request.session_options[:id] rescue session.session_id
39
- end
40
- end
41
- end
42
-
43
5
  module Controllers
44
6
  module Helpers
45
7
  extend ActiveSupport::Concern
@@ -70,7 +32,6 @@ module ActionDispatch::Routing
70
32
  # need devise_for mappings already declared to create filters and helpers.
71
33
  def finalize_with_galapagos_mobile!
72
34
  finalize_without_galapagos_mobile!
73
- ::Devise::FailureApp.send :include, GalapagosMobile::Devise::FailureApp
74
35
  ActionController::Base.send :include, GalapagosMobile::Devise::Controllers::Helpers
75
36
  end
76
37
  alias_method_chain :finalize!, :galapagos_mobile
@@ -0,0 +1,64 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # /config/initializers/devise.rb
4
+ # Devise.setup do |config|
5
+ # ...
6
+ # config.warden do |manager|
7
+ # manager.failure_app = GalapagosMobile::FailureApp
8
+ # end
9
+ # end
10
+ #
11
+ # resources
12
+ # from jpmobile/trans_sid.rb -v 1.0.0.pre
13
+ # from devise/failure_app.rb -v 0.1.8
14
+ #
15
+ module GalapagosMobile
16
+ class FailureApp < ::Devise::FailureApp
17
+ class_inheritable_accessor :trans_sid_mode
18
+ # Set trans_sid_mode if you want to use others.
19
+ # ex. ::Devise::FailureApp.trans_sid_mode = :always
20
+ # in config/initializers/galapagos_mobile.rb
21
+ self.trans_sid_mode = :mobile
22
+
23
+ protected
24
+ # URLにsession_idを追加する。
25
+ def default_url_options
26
+ result = super || {}
27
+ return result unless request # for test process
28
+ return result unless apply_trans_sid?
29
+ return result.merge({session_key => jpmobile_session_id})
30
+ end
31
+
32
+ # override
33
+ def http_auth?
34
+ if request.xhr?
35
+ ::Devise.http_authenticatable_on_xhr
36
+ elsif http_auth_header?
37
+ !(request_format && ::Devise.navigational_formats.include?(request_format))
38
+ else
39
+ false
40
+ end
41
+ end
42
+
43
+ # from Devise -v 1.2.0
44
+ # It does not make sense to send authenticate headers in ajax requests
45
+ # or if the user disabled them.
46
+ def http_auth_header?
47
+ ::Devise.mappings[scope].to.http_authenticatable && !request.xhr?
48
+ end
49
+
50
+ private
51
+ # session_keyを返す。
52
+ def session_key
53
+ unless key = Rails.application.config.session_options.merge(request.session_options || {})[:key]
54
+ key = ActionDispatch::Session::AbstractStore::DEFAULT_OPTIONS[:key]
55
+ end
56
+ key
57
+ end
58
+
59
+ # session_idを返す
60
+ def jpmobile_session_id
61
+ request.session_options[:id] rescue session.session_id
62
+ end
63
+ end
64
+ end
@@ -1,3 +1,4 @@
1
+ # -*- coding: utf-8 -*-
1
2
  begin
2
3
  require 'jpmobile'
3
4
  rescue LoadError, NameError => e
@@ -7,9 +8,11 @@ rescue LoadError, NameError => e
7
8
  end
8
9
 
9
10
  ActiveSupport.on_load(:action_controller) do
11
+ require 'galapagos_mobile/request'
10
12
  require 'galapagos_mobile/trans_sid'
11
13
  end
12
14
 
13
15
  if defined?(Devise)
14
16
  require 'galapagos_mobile/devise'
17
+ require 'galapagos_mobile/failure_app'
15
18
  end
@@ -0,0 +1,15 @@
1
+ # -*- coding: utf-8 -*-
2
+ class ActionDispatch::Request
3
+ def reset_session_with_jpmobile
4
+ reset_session_without_jpmobile
5
+ # SSLと非SSLでとsession_idが異なる場合に、
6
+ # Cookie非対応の携帯でもsession_idをパラメータで引き回すための対応
7
+ if self.mobile? # && !self.mobile.supports_cookie?
8
+ self.session_options[:id] = ActiveSupport::SecureRandom.hex(16)
9
+ if Rails.application.config.session_store == ActiveRecord::SessionStore
10
+ @env[ActiveRecord::SessionStore::SESSION_RECORD_KEY] = nil
11
+ end
12
+ end
13
+ end
14
+ alias_method_chain :reset_session, :jpmobile
15
+ end
@@ -1,15 +1,28 @@
1
1
  # -*- coding: utf-8 -*-
2
- class ActionDispatch::Request
3
- def reset_session_with_jpmobile
4
- reset_session_without_jpmobile
5
- # DocomoでSSLを使用するとsession_idが変更されるため、
6
- # Cookie非対応の携帯でもsession_idをパラメータで引き回す。
7
- if self.mobile? # && !self.mobile.supports_cookie?
8
- self.session_options[:id] = ActiveSupport::SecureRandom.hex(16)
9
- if Rails.application.config.session_store == ActiveRecord::SessionStore
10
- @env[ActiveRecord::SessionStore::SESSION_RECORD_KEY] = nil
2
+ # from jpmobile -v 1.0.0.pre
3
+ require 'jpmobile/trans_sid.rb'
4
+ module ActionController
5
+ class Metal #:nodoc:
6
+ private
7
+ # trans_sidを適用すべきかを返す。
8
+ def apply_trans_sid?
9
+ # session_id blank の場合は適用しない
10
+ return false if trans_sid_mode and jpmobile_session_id.blank?
11
+
12
+ case trans_sid_mode
13
+ when :always
14
+ session.inspect
15
+ return true
16
+ when :mobile
17
+ # SSLと非SSLでとsession_idが異なる場合に、
18
+ # Cookie非対応の携帯でもsession_idをパラメータで引き回すための対応
19
+ if request.mobile?# and !request.mobile.supports_cookie?
20
+ session.inspect
21
+ return true
22
+ end
11
23
  end
24
+
25
+ return false
12
26
  end
13
27
  end
14
- alias_method_chain :reset_session, :jpmobile
15
28
  end
@@ -1,3 +1,3 @@
1
1
  module GalapagosMobile
2
- VERSION = "0.0.7"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: galapagos_mobile
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.7
5
+ version: 0.0.8
6
6
  platform: ruby
7
7
  authors:
8
8
  - Kosuke Matsuda
@@ -35,8 +35,10 @@ files:
35
35
  - install.rb
36
36
  - lib/galapagos_mobile.rb
37
37
  - lib/galapagos_mobile/devise.rb
38
+ - lib/galapagos_mobile/failure_app.rb
38
39
  - lib/galapagos_mobile/jpmobile.rb
39
40
  - lib/galapagos_mobile/rails.rb
41
+ - lib/galapagos_mobile/request.rb
40
42
  - lib/galapagos_mobile/trans_sid.rb
41
43
  - lib/galapagos_mobile/version.rb
42
44
  - test/galapagos_mobile_test.rb