我正在使用Devise和CanCan对Rails 3应用程序的前端进行授权.我还有Active Admin作为后端的接口.我正在尝试为后端的管理员创建不同的角色.两端都有一个使用不同"用户"模型和表格的登录表单.问题是CanCan从前端获取当前用户(抓取当前用户对象)并使用它来查看后端中的某个人是否具有正确的权限.
那么,我怎样才能让CanCan正确抓住登录的管理员用户?
如果有人需要更多信息,我会很乐意提供.
我在Rails应用程序中使用Devise并希望通过API公开一些模型数据,但应该像应用程序一样限制对API的访问.
$ curl http://myapp.com/api/v1/sales/7.json
{"error":"You need to sign in or sign up before continuing."}
Run Code Online (Sandbox Code Playgroud)
明显.
在这种情况下访问API是否有最佳实践?我更愿意一步验证+获取数据,但这只是为了让客户的工作更轻松.他们将使用JQuery吸引数据客户端.
感谢您的任何信息!
模型:
devise :database_authenticatable, :registerable,:timeoutable, :recoverable, :rememberable, :trackable, :validatable,:timeout_in => 10.seconds
Run Code Online (Sandbox Code Playgroud)
development.rb:
config.timeout_in = 10.seconds
Run Code Online (Sandbox Code Playgroud)
devise.rb:
config.timeout_in = 10.seconds
Run Code Online (Sandbox Code Playgroud) 我正在尝试建立授权/身份验证系统,我感到困惑,所以我有几个问题:
我已经尽力阅读所有涉及的文档,我从本教程开始
http://railsapps.github.com/tutorial-rails-bootstrap-devise-cancan.html
虽然我也阅读了 http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/和tonyamoyal.com/2010/09/29/rails -authentication与-色器件和-康康舞部分-2-宁静资源换管理员/
我真的不能按照我想要的方式工作.我该怎么做呢?
我正在使用Omniauth和Devise使用google_oauth2
策略.它运作良好,但现在我想用我选择的方式更改授权路径.
实际上,http://localhost:3000/users/auth/google_oauth2
我想要更简单,http://localhost:3000/login
因为它很容易记住.
它不会引起任何错误,因为我已禁用Devise数据库可验证(登录的唯一方法是通过谷歌帐户).
我能怎么做?
谢谢.
我正在使用rails with devise进行注册.我还添加了一个邀请码,所以不是每个人都可以注册.
邀请代码通过查询字符串传输,如"/ users/sign_up?invite_code = wajdpapojapsd",并通过"f.hidden_field:invite_code,:value => params [:invite_code]添加到注册表单的隐藏字段中".
这非常有效.唯一的问题是,如果注册没有得到验证和拒绝,则设计重定向到"/ users"并丢失其中包含invite_code的查询字符串.
由于在尝试失败后电子邮件保留在注册表单中,我相信这也适用于邀请代码.作为最糟糕的解决方案重定向:在注册失败并丢失电子邮件后返回,但保留邀请代码,将比现在的工作方式更好.
编辑:到目前为止我已经为设计设置了一个注册控制器,但是不知道如何获得所需的行为.
有关如何保留查询字符串或仅提供邀请代码的任何帮助都很棒.
我想创建一个用于访问API的自定义身份验证策略.我按照Devise中的示例代码忽略了自定义策略.
问题是有效吗?我的Api策略中的方法永远不会运行(基于试图撬开它).
我的代码:
module Devise
module Strategies
class Api < Devise::Strategies::Base
def valid?
binding.pry
params[:request_source] == 'api'
end
def authenticate!
#do stuff here
if user
success!(user)
else
warden.custom_failure!
render :json=> {:success=>false, :message=>"Error with your login or password"}, :status=>401
end
end
end
Warden::Strategies.add(:api, Devise::Strategies::Api)
end
end
Run Code Online (Sandbox Code Playgroud)
并在设计初始化程序中:
config.warden do |manager|
manager.default_strategies.unshift :api
end
Run Code Online (Sandbox Code Playgroud)
无论我做什么,似乎Devise总是使用其默认策略.AFAIK,这应该够了......
- - - -编辑 - - - -
我在我的设计初始化程序的顶部需要这样的策略:
require Rails.root.join('app/devise/strategies/api')
Run Code Online (Sandbox Code Playgroud)
我知道策略是在启动时加载的,因为如果我在类中放入一个pry调用,它将启动一个pry会话.但是方法内部的Pry调用永远不会运行.:-S
我目前正在开发一个系统,只有当用户不是学生时才需要电子邮件,如果用户是学生则需要用户名.所以这就是我在模型中所做的:
class User < ActiveRecord::Base
validates :email, presence: true, unless: :student?
validates :username, presence: true, if: :student?
end
Run Code Online (Sandbox Code Playgroud)
这在用户名属性上工作正常,但对于电子邮件,我仍然会收到Email cannot be blank
错误.我想Devise有自己的电子邮件验证规则.
我怎样才能使这个工作,我的意思是重写Devise验证电子邮件的存在规则?
谢谢
我的网页上有一个按钮,用于将我的用户索引从params重定向回用户索引.我的问题是,当我通过按钮导航回users_path时,我会收到一条消息表单"你已经登录了".即使我没有尝试登录并且只是导航回同一页面但删除了参数,这种情况也会发生.
有问题的按钮看起来像,
<%= button_to "All Users", users_path, class: "button expand" %>
Run Code Online (Sandbox Code Playgroud)
我在我的所有文件中搜索了"您已登录"的实例.唯一的参考是在devise.en.yml中所说的 already_authenticated: "You are already signed in."
我正在建立一个使用Ruby on Rails + AngularJS + 设计令牌身份验证Gem的网站,我想实现Google身份验证器.
我找到了这个gem devise_google_authenticator
问题是我无法实现Gem,因为我正在使用AngularJS.
devise ×10
cancan ×2
ruby ×2
angularjs ×1
email ×1
omniauth ×1
query-string ×1
validation ×1
warden ×1
web-services ×1