我正在编写一个Rails 4应用程序,它将为尚未开发的移动应用程序公开API.用户将使用移动应用程序中的电子邮件和密码进行身份验证.
虽然我已经找到了很多关于这个主题的信息.很难看出什么是过时的或非最佳的.我已经阅读了HTTP Basic Auth,它看起来似乎不太安全,以及基于HTTP令牌的Auth,但我不确定如何将它与常规电子邮件和密码认证结合起来(我正在使用Devise by方式).
我想知道目前关于如何实现这一目标的最佳实践,所以我一定会采取正确的方式.
我正在尝试编写一个理解,它将以下列方式组成两个字典:
d1 = {1:'a',2:'b',3:'c'}
d2 = {'a':'A','b':'B','c':'C'}
result = {1:'A',2:'B',3:'C'}
Run Code Online (Sandbox Code Playgroud)
也就是说,所得到的字典由第一个的键和每个第二个的值形成,其中第一个的值等于第二个的键.
这是我到目前为止所得到的:
{ k1:v2 for (k1,v1) in d1 for (k2,v2) in d2 if v1 == k2 }
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我是Python的新手,所以我不确定这是否真的有意义.顺便说一句,我正在使用python 3.3.2.
提前致谢.
我正在开发一个通过API为移动应用程序提供服务的Rails 4应用程序,并且有一个用于管理员管理应用程序的Web UI.还有一些用户可以看到的网页(成功的电子邮件确认和重置密码).
我创建了两组控制器:一组继承自APIController,另一组继承自AdminController.这两个都继承自ApplicationController.负责面向用户的网页的其余控制器也继承自ApplicationController.
鉴于此方案,我不确定如何使用protect_from_forgery正确实施CSRF保护.我目前有以下内容:
class ApplicationController < ActionController::Base
# ...
end
module API
class APIController < ApplicationController
protect_from_forgery with: :null_session, if: Proc.new { |c| c.request.format == 'application/json' }
# ...
end
end
module Admin
class AdminController < ApplicationController
protect_from_forgery with: :exception
# ...
end
end
class UsersController < ApplicationController
protect_from_forgery with: :exception
# ...
end
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:这是正确的吗?有没有办法改善它?APIController中的检查是否毫无意义,因为所有API请求都只是JSON吗?
Brakeman抱怨说ApplicationController中没有protect_from_forgery调用,但也许它看不到子类中的调用.
提前致谢!