Ruby on rails ionic应用程序可用于服务器,但不适用于ios emulator
我有一个ionic应用程序,它可以完全与Ruby on rails ionic应用程序可用于服务器,但不适用于ios emulator,ruby-on-rails,ionic-framework,cors,ios-simulator,rails-api,Ruby On Rails,Ionic Framework,Cors,Ios Simulator,Rails Api,我有一个ionic应用程序,它可以完全与ionic serve配合使用,但不能始终与ionic emulate或ionic emulate-lc配合使用。应用程序将同时加载这两个文件。第一页是登录屏幕的链接。该链接在两种情况下都起作用,并进入登录屏幕。使用爱奥尼亚服务,用户可以成功登录。使用爱奥尼亚仿真,按“登录”将生成以下服务器日志(Rails,而非爱奥尼亚): 正如您在上面的代码中所看到的,服务器正在发回一个200响应,因此这一定是客户端/离子/模拟器的问题。事实上,它还可以与爱奥尼亚服务公
ionic serve
配合使用,但不能始终与ionic emulate
或ionic emulate-lc
配合使用。应用程序将同时加载这两个文件。第一页是登录屏幕的链接。该链接在两种情况下都起作用,并进入登录屏幕。使用爱奥尼亚服务
,用户可以成功登录。使用爱奥尼亚仿真
,按“登录”将生成以下服务器日志(Rails,而非爱奥尼亚):
正如您在上面的代码中所看到的,服务器正在发回一个200响应,因此这一定是客户端/离子/模拟器的问题。事实上,它还可以与爱奥尼亚服务公司合作,这也让我相信它是客户端而不是服务器端。如果我运行离子仿真-lc
,我将在服务器日志中获得以下内容:
Started OPTIONS "/api/auth/sign_in" for ::1 at 2016-04-18 10:42:14 -0400
ActionController::RoutingError (No route matches [OPTIONS] "/api/auth/sign_in"):
actionpack (4.2.6) lib/action_dispatch/middleware/debug_exceptions.rb:21:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'
railties (4.2.6) lib/rails/rack/logger.rb:38:in `call_app'
railties (4.2.6) lib/rails/rack/logger.rb:20:in `block in call'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `block in tagged'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:26:in `tagged'
activesupport (4.2.6) lib/active_support/tagged_logging.rb:68:in `tagged'
railties (4.2.6) lib/rails/rack/logger.rb:20:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/request_id.rb:21:in `call'
rack (1.6.4) lib/rack/methodoverride.rb:22:in `call'
rack (1.6.4) lib/rack/runtime.rb:18:in `call'
activesupport (4.2.6) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
actionpack (4.2.6) lib/action_dispatch/middleware/static.rb:120:in `call'
rack (1.6.4) lib/rack/sendfile.rb:113:in `call'
rack-cors (0.4.0) lib/rack/cors.rb:80:in `call'
railties (4.2.6) lib/rails/engine.rb:518:in `call'
railties (4.2.6) lib/rails/application.rb:165:in `call'
rack (1.6.4) lib/rack/lock.rb:17:in `call'
rack (1.6.4) lib/rack/content_length.rb:15:in `call'
rack (1.6.4) lib/rack/handler/webrick.rb:88:in `service'
/Users/philipgreenwald/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:138:in `service'
/Users/philipgreenwald/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/webrick/httpserver.rb:94:in `run'
/Users/philipgreenwald/.rvm/rubies/ruby-2.2.0/lib/ruby/2.2.0/webrick/server.rb:294:in `block in start_thread'
Rendered /Users/philipgreenwald/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (0.9ms)
Rendered /Users/philipgreenwald/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/routes/_route.html.erb (4.3ms)
Rendered /Users/philipgreenwald/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/routes/_table.html.erb (1.0ms)
Rendered /Users/philipgreenwald/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (0.8ms)
Rendered /Users/philipgreenwald/.rvm/gems/ruby-2.2.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb within rescues/layout (89.6ms)
有趣的是:使用离子仿真
发送post请求,但使用离子仿真-lc
发送选项请求。无论哪种方式,它都不会在模拟器中工作。它仅适用于爱奥尼亚发球
。这是另一个有趣的问题,登录前的ionic日志显示:
0 515446 log deviceready has not fired after 5 seconds.
1 515447 log Channel not fired: onCordovaInfoReady
最后,以下是从爱奥尼亚服务运行时的服务器日志:
Started POST "/api/auth/sign_in" for ::1 at 2016-04-18 10:47:28 -0400
Processing by Api::SessionsController#create as HTML
Parameters: {"email"=>"facility@example.com", "password"=>"[FILTERED]", "session"=>{"email"=>"facility@example.com", "password"=>"[FILTERED]"}} FacilityUser Load (0.3ms) SELECT "facility_users".* FROM "facility_users" WHERE (email = 'facility@example.com' AND provider='email') ORDER BY "facility_users"."id" ASC LIMIT 1
(0.1ms) begin transaction
SQL (0.2ms) UPDATE "facility_users" SET "tokens" = ?, "updated_at" = ? WHERE "facility_users"."id" = ? [["tokens", "{\"vyBzhBqltxsx5KzZIvpnlA\":{\"token\":\"$2a$10$aWmHJTG8QcfUQJvB5wG9bOSgCLDi7kCJQlknOyZk0dEG1SwrYVpTu\",\"expiry\":1462199088},\"MaSuqSB_IYB3030XutiEEQ\":{\"token\":\"$2a$10$HSWVZ5821E/5pPpX2yRMAOa0LZ6w36AQH3tPwA/zBF9jjnrUdgztS\",\"expiry\":1462199119},\"Wx0wza7cApR_6lT0FYdbTA\":{\"token\":\"$2a$10$N/PE3TXrIGLi6yk2EH1M7e9BFPFo.DRkwSSlDLia8z0m/CeBGtHRy\",\"expiry\":1462199144},\"ur2tP2OtJOEMU5LoghEW0g\":{\"token\":\"$2a$10$ZE9Y3Ngd.VeR6Iug9iqQM.VNp9WKWrhxmKIiouIyo53ffhJGEIMzW\",\"expiry\":1462199180},\"qTPfmajhEnkYJD9YtoKnJw\":{\"token\":\"$2a$10$5woDc19MlfHwVztm5Gt1oeb0mvTJLnOXmqSZ0vtEYJYBiiZBhBCm.\",\"expiry\":1462199219},\"j3EIZGfC1EPKgsqIyA4ZAA\":{\"token\":\"$2a$10$j9lk7SdNi9VzCQvfq.zui.tQbE8i8FpRcu7nd6oOakqoFOu4DcsGK\",\"expiry\":1462199227},\"Re5xw7BGJDjF_VfkPvk1ig\":{\"token\":\"$2a$10$DltH/JoBIYmWF/ikwZVUpevJFIF0h7rjmPhwTAPa2pL07GBQGx0XK\",\"expiry\":1462199858},\"X2nb-s3j4BG9z8AFOplHcw\":{\"token\":\"$2a$10$mfeJvEtSlfFRgRuja5LVQ.VVn9I8JvudgEh7/02lI/kQ2E1csDe2S\",\"expiry\":1462200448}}"], ["updated_at", "2016-04-18 14:47:28.872136"], ["id", 1]]
(1.3ms) commit transaction
(0.1ms) begin transaction
SQL (0.2ms) UPDATE "facility_users" SET "last_sign_in_at" = ?, "current_sign_in_at" = ?, "sign_in_count" = ?, "updated_at" = ? WHERE "facility_users"."id" = ? [["last_sign_in_at", "2016-04-18 14:37:38.770547"], ["current_sign_in_at", "2016-04-18 14:47:28.875744"], ["sign_in_count", 8], ["updated_at", "2016-04-18 14:47:28.876805"], ["id", 1]]
(0.5ms) commit transaction
[active_model_serializers] Rendered ActiveModel::Serializer::Null with Hash (0.07ms)
Completed 200 OK in 182ms (Views: 0.5ms | ActiveRecord: 2.6ms)
似乎ionic-serve
和ionic-emulate
从服务器获得相同的响应,而ionic-emulate-lc
获得不同的响应。无论哪种方式,即使服务器响应对于ionic-emulate
和ionic-serve
是相同的,它也只适用于ionic-serve
。我如何让应用程序同时使用爱奥尼亚仿真
和爱奥尼亚仿真-lc
?经过大量挖掘,我终于阅读了这篇文章,完美地回答了这个问题:
基本上,白名单的api修复一切。另外,在Rails中,我必须添加
skip_before_filter :verify_authenticity_token
到api控制器。事实证明,问题毕竟是后台的
skip_before_filter :verify_authenticity_token