【发布时间】:2017-03-01 21:52:48
【问题描述】:
我有点卡住了,我无法找到解决方案。我有一个 Rails 站点,它使用 devise 作为前端,devise_token_auth 作为 api。前端使用服务器端渲染页面和 api 调用的组合来向用户显示数据。 如果我使用纯角度登录,登录表单最终会起作用(通常 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')
)
如果我使用标准发布方法,服务器会呈现正确的信息,但没有为ng-token-auth 设置令牌。我可以使用以下方法在 session#create 上手动生成和发送令牌标头:
# POST /resource/sign_in
def create
super do |user|
newAuth = user.create_new_auth_token
response.headers.merge!(newAuth)
end
end
我使用这种方法的问题是 ng-token-auth 从不从标头中获取令牌,因为它没有发出请求。我一直在寻找一种手动设置令牌标头的方法,但没有成功。
-- 另一方面,我最终将转向 oauth 解决方案,因此无论我使用什么解决方法都需要移植到该解决方案。 -- 我应该提到服务器端渲染负责设计元素以及打开和关闭功能。我还使用 current_user 的元素根据用户位置设置表名的子集。
【问题讨论】:
标签: ruby-on-rails angularjs authentication devise