gem 'devise_token_auth'
gem 'omniauth'
gem 'rack-cors', :require => 'rack/cors'
rails generate devise_token_auth:install User auth
class User < ActiveRecord::Base
devise :database_authenticatable,
:registerable,
:recoverable,
:rememberable,
:trackable,
:validatable,
:omniauthable
include DeviseTokenAuth::Concerns::User
end
heroku signin
heroku keys:add
heroku create
git push heroku master
heroku run rake db:create
heroku run rake db:migrate
heroku run rake db:seed
Request type: POST on "https://myapp.herokuapp.com/auth/sign_in"
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Body: email=user%40example.com&password=monkey67
User.create(email: 'us...@example.com', nickname: 'UOne', name: 'User One', password: "monkey67")
User.create(email: 'us...@example.com', nickname: 'UTwo', name: 'User two', password: "monkey69")
...
git push
git push heroku master
heroku run rake db:seed
...
Request type: POST on "https://hereismyapp.herokuapp.com/auth/sign_in"
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Body: email=user2%40example.com&password=monkey69
> Started POST "/auth/sign_in" for 94.254.189.86 at 2017-05-18 21:09:33 +0000
> User Load (1.1ms) SELECT "users".* FROM "users" WHERE (email = 'us...@example.com' AND provider='email') ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]]
> Processing by DeviseTokenAuth::SessionsController#create as */*
> Parameters: {"email"=>"us...@example.com", "password"=>"[FILTERED]"}
...
> Completed 200 OK in 492ms (Views: 0.5ms | ActiveRecord: 36.8ms)
> at=info method=POST path="/auth/sign_in" host=hereismyapp.herokuapp.com request_id=df397a4c-ea1e-4c90-8d40-f2382dfab1f8 fwd="94.254.189.86" > dyno=web.1 connect=3ms service=500ms status=200 bytes=580 protocol=https
> Started POST "/auth/sign_in" for 94.254.189.86 at 2017-05-18 21:09:43 +0000
> User Load (1.0ms) SELECT "users".* FROM "users" WHERE (email = 'us...@example.com' AND provider='email') ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]]
> IndexError (string not matched):
> at=info method=POST path="/auth/sign_in" host=hereismyapp.herokuapp.com request_id=f2e57933-1220-4e55-9554-2496638a1c9f fwd="94.254.189.86" dyno=web.1 connect=1ms service=162ms status=500 bytes=189 protocol=https
heroku pg:reset DATABASE
heroku run rake db:migrate
heroku run console
User.where(email: 'us...@example.com', provider: 'email')
D, [2017-05-20T10:43:39.855948 #4] DEBUG -- : User Load (1.6ms) SELECT "users".* FROM "users" WHERE "users"."email" = $1 AND "users"."provider" = $2 [["email", "us...@example.com"], ["provider", "email"]]
=> #<ActiveRecord::Relation [#<User id: 1, provider: "email", uid: "us...@example.com", name: "User One", nickname: "UOne", image: nil, email: "us...@example.com", created_at: "2017-05-20 10:05:39", updated_at: "2017-05-20 10:29:25">]>
2017-05-20T10:52:18.126163+00:00 app[web.1]: I, [2017-05-20T10:52:18.126049 #4] INFO -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] Started POST "/auth/sign_in" for 159.205.203.189 at 2017-05-20 10:52:18 +0000
2017-05-20T10:52:18.127182+00:00 app[web.1]: I, [2017-05-20T10:52:18.127110 #4] INFO -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] Processing by DeviseTokenAuth::SessionsController#create as HTML
2017-05-20T10:52:18.127236+00:00 app[web.1]: I, [2017-05-20T10:52:18.127186 #4] INFO -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] Parameters: {"email"=>"us...@example.com", "password"=>"[FILTERED]"}
2017-05-20T10:52:18.285137+00:00 app[web.1]: I, [2017-05-20T10:52:18.284972 #4] INFO -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] Completed 500 Internal Server Error in 158ms (ActiveRecord: 1.0ms)
2017-05-20T10:52:18.130991+00:00 app[web.1]: D, [2017-05-20T10:52:18.130911 #4] DEBUG -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] User Load (1.0ms) SELECT "users".* FROM "users" WHERE (email = 'us...@example.com' AND provider='email') ORDER BY "users"."id" ASC LIMIT $1 [["LIMIT", 1]]
2017-05-20T10:52:18.286563+00:00 app[web.1]: F, [2017-05-20T10:52:18.286504 #4] FATAL -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] IndexError (string not matched):
2017-05-20T10:52:18.286498+00:00 app[web.1]: F, [2017-05-20T10:52:18.286429 #4] FATAL -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70]
2017-05-20T10:52:18.286744+00:00 app[web.1]: F, [2017-05-20T10:52:18.286654 #4] FATAL -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/devise_token_auth-0.1.42/app/controllers/devise_token_auth/sessions_controller.rb:42:in `[]='
2017-05-20T10:52:18.286620+00:00 app[web.1]: F, [2017-05-20T10:52:18.286562 #4] FATAL -- : [fb643a56-f5b3-4b63-a1a6-4ce56c317f70]
2017-05-20T10:52:18.286746+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/devise_token_auth-0.1.42/app/controllers/devise_token_auth/sessions_controller.rb:42:in `create'
2017-05-20T10:52:18.286747+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal/basic_implicit_render.rb:4:in `send_action'
2017-05-20T10:52:18.286749+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/abstract_controller/base.rb:188:in `process_action'
2017-05-20T10:52:18.286750+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal/rendering.rb:30:in `process_action'
2017-05-20T10:52:18.286751+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/abstract_controller/callbacks.rb:20:in `block in process_action'
2017-05-20T10:52:18.286752+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:126:in `call'
2017-05-20T10:52:18.286753+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:506:in `block (2 levels) in compile'
2017-05-20T10:52:18.286754+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:455:in `call'
2017-05-20T10:52:18.286755+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:101:in `__run_callbacks__'
2017-05-20T10:52:18.286756+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:750:in `_run_process_action_callbacks'
2017-05-20T10:52:18.286757+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:90:in `run_callbacks'
2017-05-20T10:52:18.286758+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/abstract_controller/callbacks.rb:19:in `process_action'
2017-05-20T10:52:18.286759+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal/rescue.rb:20:in `process_action'
2017-05-20T10:52:18.286760+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'
2017-05-20T10:52:18.286760+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/notifications.rb:164:in `block in instrument'
2017-05-20T10:52:18.286761+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
2017-05-20T10:52:18.286762+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal/instrumentation.rb:30:in `process_action'
2017-05-20T10:52:18.286762+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/notifications.rb:164:in `instrument'
2017-05-20T10:52:18.286763+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal/params_wrapper.rb:248:in `process_action'
2017-05-20T10:52:18.286764+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activerecord-5.0.3/lib/active_record/railties/controller_runtime.rb:18:in `process_action'
2017-05-20T10:52:18.286765+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/abstract_controller/base.rb:126:in `process'
2017-05-20T10:52:18.286765+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal.rb:190:in `dispatch'
2017-05-20T10:52:18.286766+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_controller/metal.rb:262:in `dispatch'
2017-05-20T10:52:18.286767+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
2017-05-20T10:52:18.286767+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/routing/route_set.rb:32:in `serve'
2017-05-20T10:52:18.286768+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/routing/mapper.rb:16:in `block in <class:Constraints>'
2017-05-20T10:52:18.286773+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/journey/router.rb:39:in `block in serve'
2017-05-20T10:52:18.286772+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/routing/mapper.rb:46:in `serve'
2017-05-20T10:52:18.286774+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/journey/router.rb:26:in `each'
2017-05-20T10:52:18.286774+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/journey/router.rb:26:in `serve'
2017-05-20T10:52:18.286775+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/routing/route_set.rb:725:in `call'
2017-05-20T10:52:18.286776+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/rack-cors-0.4.1/lib/rack/cors.rb:81:in `call'
2017-05-20T10:52:18.286776+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/warden-1.2.7/lib/warden/manager.rb:36:in `block in call'
2017-05-20T10:52:18.286777+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `catch'
2017-05-20T10:52:18.286778+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/warden-1.2.7/lib/warden/manager.rb:35:in `call'
2017-05-20T10:52:18.286778+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/etag.rb:25:in `call'
2017-05-20T10:52:18.286779+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/conditional_get.rb:38:in `call'
2017-05-20T10:52:18.286781+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/callbacks.rb:38:in `block in call'
2017-05-20T10:52:18.286782+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:97:in `__run_callbacks__'
2017-05-20T10:52:18.286780+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/head.rb:12:in `call'
2017-05-20T10:52:18.286783+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:750:in `_run_call_callbacks'
2017-05-20T10:52:18.286783+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/callbacks.rb:90:in `run_callbacks'
2017-05-20T10:52:18.286784+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/callbacks.rb:36:in `call'
2017-05-20T10:52:18.286785+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/debug_exceptions.rb:49:in `call'
2017-05-20T10:52:18.286785+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/remote_ip.rb:79:in `call'
2017-05-20T10:52:18.286786+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/show_exceptions.rb:31:in `call'
2017-05-20T10:52:18.286787+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/railties-5.0.3/lib/rails/rack/logger.rb:36:in `call_app'
2017-05-20T10:52:18.286787+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/railties-5.0.3/lib/rails/rack/logger.rb:24:in `block in call'
2017-05-20T10:52:18.286788+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/tagged_logging.rb:69:in `block in tagged'
2017-05-20T10:52:18.286789+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/tagged_logging.rb:26:in `tagged'
2017-05-20T10:52:18.286789+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/tagged_logging.rb:69:in `tagged'
2017-05-20T10:52:18.286790+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/railties-5.0.3/lib/rails/rack/logger.rb:24:in `call'
2017-05-20T10:52:18.286791+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/request_id.rb:24:in `call'
2017-05-20T10:52:18.286792+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/activesupport-5.0.3/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
2017-05-20T10:52:18.286791+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/runtime.rb:22:in `call'
2017-05-20T10:52:18.286792+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/executor.rb:12:in `call'
2017-05-20T10:52:18.286795+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/actionpack-5.0.3/lib/action_dispatch/middleware/static.rb:136:in `call'
2017-05-20T10:52:18.286796+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/rack-2.0.3/lib/rack/sendfile.rb:111:in `call'
2017-05-20T10:52:18.286796+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/railties-5.0.3/lib/rails/engine.rb:522:in `call'
2017-05-20T10:52:18.286797+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/puma-3.8.2/lib/puma/configuration.rb:224:in `call'
2017-05-20T10:52:18.286798+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/puma-3.8.2/lib/puma/server.rb:600:in `handle_request'
2017-05-20T10:52:18.286798+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/puma-3.8.2/lib/puma/server.rb:435:in `process_client'
2017-05-20T10:52:18.286799+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/puma-3.8.2/lib/puma/server.rb:299:in `block in run'
2017-05-20T10:52:18.286799+00:00 app[web.1]: [fb643a56-f5b3-4b63-a1a6-4ce56c317f70] vendor/bundle/ruby/2.3.0/gems/puma-3.8.2/lib/puma/thread_pool.rb:120:in `block in spawn_thread'
2017-05-20T10:52:18.288496+00:00 heroku[router]: at=info method=POST path="/auth/sign_in" host=thawing-mesa-14670.herokuapp.com request_id=fb643a56-f5b3-4b63-a1a6-4ce56c317f70 fwd="159.205.203.189" dyno=web.1 connect=1ms service=165ms status=500 bytes=189 protocol=https
2017-05-20T10:52:33.466720+00:00 heroku[run.5291]: Process exited with status 0
2017-05-20T10:52:33.479624+00:00 heroku[run.5291]: State changed from up to complete
gem 'devise'
gem 'cancancan'
gem 'grape'
gem 'rack-cors'gem 'jwt'
After authen user success. Using JWT to generate authtoken using on each API call