使用Angular,Ember,React等框架构建SPA风格的应用程序时,人们认为什么是身份验证和会话管理的最佳实践?我可以想到几种方法来考虑解决问题.
假设API和UI具有相同的原始域,则与使用常规Web应用程序的身份验证没有什么不同.
这可能涉及具有会话cookie,服务器端会话存储以及可能的一些会话API端点,经过身份验证的Web UI可以点击以获取当前用户信息以帮助个性化或甚至可能确定客户端上的角色/能力.当然,服务器仍会强制执行保护数据访问的规则,UI只会使用此信息来自定义体验.
像使用公共API的任何第三方客户端一样对待它,并使用类似于OAuth的某种令牌系统进行身份验证.客户端UI将使用此令牌机制来验证对服务器API发出的每个请求.
我在这里并不是一位专家,但对于绝大多数情况来说,#1似乎已经足够了,但我真的很想听到一些更有经验的意见.
security authentication ember.js angularjs single-page-application
所以我一直在尝试将http模块映射到MVC3站点的子路径.它应该很简单,因为我理解它,但它没有工作.模块设置如下:
<handlers>
<add name="Nancy" path="api/*" verb="*" type="Nancy.Hosting.Aspnet.NancyHttpRequestHandler" allowPathInfo="true" />
</handlers>
Run Code Online (Sandbox Code Playgroud)
iis6也有匹配部分,所以我可以在webdev.webserver下运行它.然而,测试部署到我的本地iis7(在Win7下)和webdev.webserver,只有/ api实际上调用处理程序.如果我调用/ api/{anything}它只返回404.
我确定我只是"做错了(tm)",但任何帮助都会受到赞赏.
注意:我还尝试了其他一些配置,包括使用标记和创建/ api文件夹,并使用完整的通配符将web.config添加到该文件夹.
目前正在查看Angular 1 - > Angular 2的升级路径,我们使用Angular 1工作完成的一件事就是在面向公众的非app页面上重用我们的一些组件.
这些页面实际上是静态HTML(尽管它们由Rails呈现),然后一些Angular 2组件被放入页面中.这与Angular 1一起工作,我们只是使用提供我们需要的指令和组件的模块来引导文档元素.根本没有路由.
使用Angular 2,它看起来像是全有或全无.您声明了一个根组件,并通过该组件呈现所有内容.这对我们来说是一个很大的转变,我想避免改变我们在这些面向公众的页面上做事的方式.
是否可以在静态HTML页面中根据需要使用Angular 2组件,还是需要转移到单个根元素SPA设计?
简而言之,我要问的是,是否可以混合使用静态内容和动态角度组件,或者必须将所有角度组件都放在页面上的单个根元素中?
我有一个2 ng-includes的HTML.考虑服务器中是否存在其中一个ng-include src.截至目前,它只会加载空白的HTML,并在浏览器控制台中说它找不到http-404文件.
所以在这种情况下,我想将默认错误页面(存在于服务器中)加载到该特定div中,即一半显示默认错误页面,另一半显示通过nginclude加载的正确div.
我的逻辑是,我正在使用一个http拦截器,我拦截所有的http调用.每当发生404时,我想返回默认错误页面,该页面必须只加载到div中.所以它就像模拟一个正确的http调用,但发送一个错误页面,我认为必须加载到正确的div.
但这不会发生:).我尝试使用默认的window.load('').但随后它会加载到页面顶部并跨页面显示.
或者我应该捕获div id(如果是这样?)然后执行tat id加载默认错误HTML?
需要你的想法.
我有病原体设置并且在Linux下工作正常,但是当我尝试在windows下使用gvim73的某些配置时它根本不起作用.我没有得到任何错误,但它没有做任何事情.
这是我在git上的dotfiles存储库.我已经检查了〜/ vimfiles并将以下内容添加到_vimrc:
filetype off
call pathogen#helptags()
call pathogen#runtime_append_all_bundles()
Run Code Online (Sandbox Code Playgroud)
我尝试过几乎所有的事情,包括将autoload/pathogen.vim和bundle /文件夹放在程序文件下的/ vim73目录中.没有.
有没有人有这方面的经验?我假设有一些特定于Windows的东西需要发生才能使这项工作.
编辑:可能还值得注意的是,我pathogen#runtime_append_all_bundles()甚至可以使用制表符完成,因此正在加载病原体,但我的插件无法正常工作.
我正在使用Rails 4.0.0.beta1.我添加了两个目录:app/services和test/services.
我还添加了这个代码,基于阅读railties的testing.rake:
namespace :test do
Rake::TestTask.new(services: "test:prepare") do |t|
t.libs << "test"
t.pattern = 'test/services/**/*_test.rb'
end
end
Run Code Online (Sandbox Code Playgroud)
我发现rake test:services运行测试test/services; 但是,rake test不运行那些测试.看起来应该如此 ; 这是代码:
Rake::TestTask.new(:all) do |t|
t.libs << "test"
t.pattern = "test/**/*_test.rb"
end
Run Code Online (Sandbox Code Playgroud)
我忽略了什么吗?
是否有任何使用Rails和Heroku Postgres与pgcrypto的公钥PGP的安全性最佳实践.
天真和直接的方式似乎是使用Heroku的ENV变量存储私钥和密码.然而,这似乎并没有增加太多安全性,因为现在任何有权访问环境的人都可以轻松访问这两个值.
这样做的目的是适当地加密任何与隐私有关的信息,例如SIN号码.
场景:
假设您有一些字段,对于某些通用的监管隐私要求,需要或建议加密存储,例如政府ID(例如SIN号).使用pgcrypto加密此信息的适当或甚至常见的过程是什么.
如果某人对某个场景有其他建议,我也很乐意将其包括在内.
因此,似乎没有任何干净的方法来一般地允许具有强参数的Hash字段.这当然可能是一个强大的参数问题,但我很好奇是否有解决方法.我有一些领域的模型......
field :name, type: String
field :email, type: String
field :other_stuff, type: Hash, default: {}
Run Code Online (Sandbox Code Playgroud)
现在我可以允许一切:
params.require(:registration).permit!
Run Code Online (Sandbox Code Playgroud)
但这不是一个好主意,我想做的是......
params.require(:registration).permit(:name,:email,{other_stuff:{}})
但是,使用强参数似乎不可能实现这一点,不可能将哈希列入白名单(对于以SQL为中心的ActiveRecord API而言!).任何想法如何做到这一点,或者我最好提交一个Rails补丁来允许这种情况.
因此,资产管道摘要存在一个小问题,即我们有许多HTML模板作为资产(对于AngularJS),我们使用asset_path帮助程序在Javascript文件中引用这些资产的路径.不幸的是,由于资产预编译步骤(和Heroku)检查更改的方式,对模板进行更改不会导致重新编译javascript文件.
所以基本上在像application.coffee.erb我们可能有类似的东西的文件中:
url = '<%= asset_path('views/template.html') %>'
Run Code Online (Sandbox Code Playgroud)
当我们运行时rake assets:precompile,将变为/assets/views/template-1023911231.html具有摘要值但是如果template.html.slim更改,则摘要将改变但是由于application.coffee.erb没有从根本上改变它不会被重新编译并继续指向旧的摘要.
思考?解决方案?这实际上对我来说似乎是个错误.
更新
目前我最好的解决方案是在application.rb中更新资产版本,如果我们需要更改我们的HTML模板资产但没有更改javascript.
我正在研究一个非常大的Rails应用程序.我们最初并没有使用太多的继承,但是我们从顾问那里获得了一些开眼界的经验,并且正在寻求重构我们的一些模型.
我们的应用程序中有很多以下模式:
class Project < ActiveRecord::Base
has_many :graph_settings
end
class GraphType < ActiveRecord::Base
has_many :graph_settings
#graph type specific settings (units, labels, etc) stored in DB and very infrequently updated.
end
class GraphSetting < ActiveRecord::Base
belongs_to :graph_type
belongs_to :project
# Project implementation of graph type specific settings (y_min, y_max) also stored in db.
end
Run Code Online (Sandbox Code Playgroud)
这也导致视图,帮助器和GraphSetting模型本身中的大量条件.这些都不好.
一个简单的重构,我们摆脱GraphType,支持使用更像这样的结构:
class Graph < ActiveRecord::Base
belongs_to :project
# Generic methods and settings
end
class SpecificGraph < Graph
# Default methods and settings hard coded
# Project …Run Code Online (Sandbox Code Playgroud) angularjs ×3
heroku ×2
angular ×1
asp.net ×1
ember.js ×1
encryption ×1
html ×1
httphandler ×1
iis-7 ×1
inheritance ×1
javascript ×1
jquery ×1
mongoid ×1
nancy ×1
postgresql ×1
ruby ×1
security ×1
sti ×1
testing ×1
testunit ×1
vim ×1
windows ×1