我有点困了,还没有找到解决办法。我有一个rails站点,它的前端使用designe,api使用designe\u token\u auth。前端使用服务器端呈现页面和api调用的组合向用户显示数据。如果我使用纯角度登录,登录表单最终会起作用(ushally 2-3提交):
%div{'ng-controller'=>'logInCtrl'}
%h2 Log In
%div{:layout=>'column'}
%div{:flex=>20}
%div{:flex=>60, :layout=>'column'}
= form_for(resource, as: resource_name, url: session_path(resource_name)) do |f|
%div{:layout=>'column'}
%md-input-container
=f.label :login
%input{'ng-model'=>'loginForm.login', :autofocus => 'true'}
%md-input-container
= f.label :password
%input{:type=>'password', 'ng-model'=>'loginForm.password', :autocomplete => 'off'}
%md-input-container
%md-button.md-raised.md-primary{'ng-click'=>'submitMe()'}
-#{:type=>'submit'}
%md-icon.mdi.mdi-account-key
Log In
:coffee
myApp.controller 'logInCtrl', ($scope, $resource, $http, $mdDialog, $auth ) ->
$scope.submitMe = () ->
$auth.submitLogin($scope.loginForm).then( (resp)->
location.replace('/users/sign_in')
)
如果我使用标准的post方法,服务器会呈现正确的信息,但没有为ng token auth设置令牌。我可以使用以下方法在会话#创建时手动生成和发送令牌头:
# POST /resource/sign_in
def create
super do |user|
newAuth = user.create_new_auth_token
response.headers.merge!(newAuth)
end
end
我对这种方法的问题是ng-tonic-auth从不从标头中获取令牌,因为它没有发出请求。我一直在寻找一种手动设置令牌标头的方法,但没有运气。
--作为另一方,我最终将转向oauth解决方案,因此我使用的任何解决方案都需要移植到该解决方案我应该提到,服务器端渲染负责设计元素以及打开和关闭功能。我还使用current\u user的元素根据用户位置设置表名的子集。
经过一些研究和一段时间后,我想出了一个可行的解决方案,尽管有点老套。
当designe创建新会话时,将调用重定向到配置文件中指定的路由,因此设置任何变量都将丢失。第二个问题是,ng token auth只会设置和使用在登录功能期间设置的令牌,因此不会检测到通过页面标题简单发送令牌(这是浏览器的限制,而不是代码的限制)。
在为我的用户尝试了使用ng token auth和标准Deviate身份验证的不同迭代之后,我得出结论,最好先使用Deviate授权用户,然后以某种方式使用ng token auth设置令牌;所以我开始研究ng token auth在通过登录收到令牌时实际做了什么。事实证明,它设置了两个cookie:
currentConfigName |默认|域|/|扩展日期
auth\u标头| url编码的令牌数据|域|/| exp日期
现在的问题是如何将新生成的令牌传递给前端;这使我们比我想象的要简单。由于Rails中调用之间保留的唯一数据是会话数据,因此我决定在会话数据中添加一个标志来表示我的Application ationController
以生成一个新密钥是有意义的。
首先,我扩展了designe::sessioncontroller#create
def create
super do |user|
session[:token] = true
end
end
这将名为Token
的会话变量设置为True
。比在Application ationController
中我添加了:
before_filter :set_token
def set_token
if session[:token] && user_signed_in?
newAuth = current_user.create_new_auth_token
response.headers.merge!(newAuth)
@auth_token = newAuth
session.delete(:token)
else
@auth_token = false
end
end
此before筛选器查找会话[:token],如果set调用,则设计token auth'screate\u new\u auth\u token函数以“登录”当前用户。此标题信息既会写入传出页面标题,也会分配给变量auth\u token。最后在views/laoyouts/applicationhtml中。haml此代码块添加到%正文标记的右侧
- if @auth_token
:coffee
myApp.controller 'cookieController', ($scope, $resource, $http, $mdDialog, $auth, ipCookie ) ->
ipCookie('auth_headers', "{\"access-token\": \"#{@auth_token['access-token']}\",\"token-type\": \"Bearer\",\"client\": \"#{@auth_token['client']}\",\"expiry\": \"#{@auth_token['expiry']}\",\"uid\": \"#{@auth_token['uid']}\"}", {path: "/",expires: 9999,expirationUnit: 'days',secure: false})
ipCookie('currentConfigName', 'default', {path: "/",expires: 9999,expirationUnit: 'days',secure: false})
%div{'ng-controller'=>'cookieController'}
这将添加一个空的
div
标记和角控制器,该控制器使用写入@auth_token
的数据和ipCookie
函数(由ng-Token-auth
要求)来编写必要的cookie。
几点注意事项
我将代码块添加到主布局页面和ApplicationController中,因为当用户登录到我的站点时,他们可能会被重定向到两个页面之一,具体取决于他们的凭据。这确保了无论发送到哪个页面,都会生成代码标记并插入代码块
- 我知道可能有更好的方法来处理cookie的生成,而不是创建一个空div并为其分配一个控制器。我愿意接受更优雅的解决方案
问题内容: 确保GWT + Tomcat应用程序执行身份验证和授权的最佳策略是什么? 问题答案: 有两种基本策略: 确保入口点; 保护远程服务。 最简单的方法是使用常规的Web应用程序安全工具来限制对GWT生成的html / js文件的访问: 春季安全; web.xml约束。 这样可以让您拥有eg 和。 保护远程服务 如果上述解决方案还不够,您可以进行更深入的研究。我已经通过Spring Secu
我是Apache Shiro的初学者。我一直在跟踪文档和许多其他教程,博客等,但我就是无法使身份验证工作。当我尝试使用有效的用户名和密码登录时,总是会引发。我正在使用DynamoDB作为存储用户凭据的自定义领域,但我真的不认为这有什么关系。显然,我存储和/或执行凭据匹配的方式是不正确的。以下是我的设置:
问题内容: 我试图让我的自定义Java应用程序使用我们的Active Directory服务器进行身份验证,但由于某种原因我无法使其正常工作。谁能看到为什么呢?这是我的方法如下: 结果: 问题答案: 你尝试过这种方式吗? 也更换 与
我正在开发一个Web应用程序 然而,我在尝试允许用户通过注册链接注册时遇到了一个问题。如果用户未经身份验证,则无法访问注册表的链接(“showRegistrationForm”) 有人能洞察为什么会发生这种情况吗?我在下面包含了我的安全配置中的代码片段
尝试将ember应用程序连接到oauth2身份验证服务时,获得一个[error=“unauthorized”,error_description=“访问此资源需要完全身份验证”]。如有任何建议,我们将不胜感激。我花了几天时间想解决这个问题,但没有效果。 下面是app.js中的代码
身份验证 PDF版下载 企业应用中的URL链接可以通过OAuth2.0验证接口来获取员工的身份信息。 通过此接口获取员工身份会有一定的时间开销。对于频繁获取员工身份的场景,建议采用如下方案: 企业应用中的URL链接直接填写企业自己的页面地址; 员工跳转到企业页面时,企业校验是否有代表员工身份的cookie,此cookie由企业生成; 如果没有获取到cookie,重定向到OAuth验证链接,获取员工