如何将Rails current_user传递给AngularJS工厂API调用
How to pass Rails current_user to AngularJS factory API call?
在我的Rails应用程序中,我有一些用户,他们可以创建与他们的帐户关联的帖子。我有一个路由,"/api/:user_id/subsmissions/:id(.:format)"=>"submissions#usersubmission",如果id与关联的id匹配,它将成功显示用户帖子。
我现在想做的是在前端显示用户通过AngularJS发布的帖子。我不知道如何将:user_id传递给API调用。这是我的观点:
<div id="submission-list-container">
<ul id="indexSubmissions">
<li ng-repeat="submission in userSubmissions">
<a href="/submissions/{{submission.id}}"><h3 id="submissionh3">{{submission.title}} <small>{{submissionPreview(submission.content)}}</small></h3></a>
<h1>{{submission.user.email}}</h1>
<a id="edit_button" href="/submissions/{{submission.id}}/edit">Edit</a>
</li>
</ul>
</div>
这是我的工厂打来的电话:
BrainDB.factory('userSubmission', function($resource) {
var service = $resource('/api/:user_id/submissions/:id', {user_id: '@user_id'}, {id: '@id'} );
return service;
});
控制器的动作被称为:
def usersubmission
@user = User.find(params[:user_id])
@submissions = @user.submissions
@submission = @submissions.find(params[:id])
render json: @submission
end
"BrainDB"Angular控制器只是.query()的userSubmission工厂。在"userSubmission"工厂中,我不知道如何将关联到:user_id,以便它成功地以JSON返回所有用户的帖子。有什么建议吗?
永远不应该从客户端发送用户。您应该永远不要信任客户。
rails应用程序应该有一个会话,并且应该将当前用户存储在会话中的某个位置。(会话是一个散列,如果您手动执行,只需使用一个合理的密钥来存储当前用户的ID)。您在登录时执行此操作,然后再进行检索。
class ApplicationController < ActionController::Base
attr_accessor :current_user
before_filter :load_current_user
# ...
private
def load_current_user
self.current_user = User.find(session[:user_id])
end
end
在你的控制器中:
def usersubmission
@submissions = current_user.submissions
@submission = @submissions.find(params[:id])
render json: @submission
end
如果您使用Devise或类似的方法,那么无论如何都会容易得多,因为这类库已经在控制器中注入了current_user
(或类似名称的方法)。
相关文章:
- Angularjs工厂注入错误
- 如何在AngularJS工厂中正确声明对象属性
- AngularJS-工厂中promise ID字段的返回值
- 访问 angularjs 工厂数据之外的承诺
- 如何将数据从 angularJS 工厂填充到控制器
- AngularJS工厂调用PHP,然后返回AngularJS
- 在angularjs工厂中,如何在函数解析后返回结果
- 使用angularjs工厂的奇怪结果
- AngularJS工厂、服务和HTTP使用
- 如何使用AngularJs工厂履行承诺
- 无法访问 AngularJS 工厂属性
- 为什么我在使用 .then() 的 AngularJS 工厂中没有得到正确的响应/错误
- 尝试在 AngularJS 工厂中返回局部变量时如何避免函数表达式
- AngularJS 工厂函数无法访问本地存储的缓存变量
- 如何使用 angularjs 工厂
- 使用 AngularJS 工厂加载 json 数据
- AngularJS工厂不会工作(Yeoman)
- 如何在 angularjs 工厂中使用 json 文件返回对象数组
- AngularJS工厂在Karma与Jasmine进行测试
- 从 AngularJS 工厂中的 PHP url 获取 JSON