我正在学习如何在Rails中完成单元测试,并且我遇到了涉及Authlogic的问题.
根据文档,在测试中使用Authlogic的东西需要一些东西:
test_helper.rb中:
require "authlogic/test_case"
class ActiveSupport::TestCase
setup :activate_authlogic
end
Run Code Online (Sandbox Code Playgroud)
然后在我的功能测试中我可以登录用户:
UserSession.create(users(:tester))
Run Code Online (Sandbox Code Playgroud)
这个问题似乎源于setup :activate_authlogictest_helper.rb中的一行,只要包含它,运行功能测试时会出现以下错误:
NoMethodError: undefined method `request=' for nil:NilClass
authlogic (2.1.3) lib/authlogic/controller_adapters/abstract_adapter.rb:63:in `send'
authlogic (2.1.3) lib/authlogic/controller_adapters/abstract_adapter.rb:63:in `method_missing'
Run Code Online (Sandbox Code Playgroud)
如果我删除setup :activate_authlogic并添加Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)到test_helper.rb,我的功能测试似乎工作,但现在我的单元测试失败:
NoMethodError: undefined method `params' for ActiveSupport::TestCase:Class
authlogic (2.1.3) lib/authlogic/controller_adapters/abstract_adapter.rb:30:in `params'
authlogic (2.1.3) lib/authlogic/session/params.rb:96:in `params_credentials'
authlogic (2.1.3) lib/authlogic/session/params.rb:72:in `params_enabled?'
authlogic (2.1.3) lib/authlogic/session/params.rb:66:in `persist_by_params'
authlogic (2.1.3) lib/authlogic/session/callbacks.rb:79:in `persist'
authlogic (2.1.3) lib/authlogic/session/persistence.rb:55:in `persisting?'
authlogic (2.1.3) lib/authlogic/session/persistence.rb:39:in `find'
authlogic (2.1.3) lib/authlogic/acts_as_authentic/session_maintenance.rb:96:in `get_session_information'
authlogic (2.1.3) …Run Code Online (Sandbox Code Playgroud) 我使用rails 3.0.0.beta3来实现authlogic和subdomain-fu.并且,我在注册后自动登录子域时遇到问题.
方案是:我有一个注册表单,其中同时创建该帐户的帐户和管理员用户.每次创建新帐户时,都会为该帐户分配一个单独的子域.
提交表单时,我希望将用户重定向到"user-sub-domain"."app-domain".com,并自动创建该子域的会话.
目前,虽然用户被重定向到相应的子域,但是不会创建会话.我认为会话仅为app-domain创建,当它被重定向到子域时,它找不到会话,因此会提示用户再次登录.
但是,第二次登录工作正常.
我在development.rb中尝试过类似config.action_controller.session = {:domain =>'.dummy.localhost'}的内容.但是,它似乎不起作用.它仍然显示登录表单.
我很感激你的帮助.
谢谢.
我正在尝试使用Rails,Authlogic和Omniauth让Facebook登录我的应用程序.我正在尽可能精确地遵循http://railscasts.com/episodes/235-omniauth-part-1的第一步.
我有:
omniauth宝石,运行bundle install. user_id,provider和uid.match '/auth/:provider/callback' => 'authentications#create'添加到config/initializers/omniauth.rb:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :facebook, '20...my_app_id', 'bc...my_app_secret'
end
Run Code Online (Sandbox Code Playgroud)然后服务器无法重新启动:
/Users/san/.rvm/gems/ruby-1.9.2-p0/gems/aws-s3-0.6.2/lib/aws/s3/extensions.rb:206:
in 'const_missing_from_s3_library': uninitialized constant
OmniAuth::Strategies::Facebook (NameError)
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/rake-0.9.2/lib/rake/ext/module.rb:36:in 'const_missing'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/omniauth-1.0.0/lib/omniauth/builder.rb:22:in 'const_get'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/omniauth-1.0.0/lib/omniauth/builder.rb:22:in 'provider'
from /Users/san/Documents/sanj/myapp/config/initializers/omniauth.rb:2:in 'block in <top (required)>'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.3/lib/rack/builder.rb:46:in 'instance_eval'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/rack-1.2.3/lib/rack/builder.rb:46:in 'initialize'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/omniauth-1.0.0/lib/omniauth/builder.rb:7:in 'initialize'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.10/lib/action_dispatch/middleware/stack.rb:33:in 'new'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.10/lib/action_dispatch/middleware/stack.rb:33:in 'build'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.10/lib/action_dispatch/middleware/stack.rb:79:in 'block in build'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.10/lib/action_dispatch/middleware/stack.rb:79:in 'each'
from /Users/san/.rvm/gems/ruby-1.9.2-p0/gems/actionpack-3.0.10/lib/action_dispatch/middleware/stack.rb:79:in 'inject' …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用single_access_token为我的rails后端应用程序设置Authlogic(我正在使用rails-api gem).
我正在关注这个例子:http://blog.centresource.com/2013/06/04/using-ember-auth-with-rails-3-and-authlogic/
到目前为止,我能够创建用户,但是当我尝试登录时,它在user_session.save上失败:
NoMethodError in Api::V1::UserSessionsController#create
undefined method `cookies' for #<Api::V1::UserSessionsController:0x00000004528cb8>
Run Code Online (Sandbox Code Playgroud)
根据我在这里找到的类似问题,我必须将Authlogic配置为:
acts_as_authentic do |c|
c.login_field = :email
c.maintain_sessions = false
end
Run Code Online (Sandbox Code Playgroud)
在我的用户模型上.然而,它一直在失败.我假设当UserSession被保存时,Authlogic尝试更新User上的魔术字段,但我不知道为什么还在尝试使用cookie.
我在Heroku上测试我的应用程序(这太棒了!)我意识到我无法创建我的root用户.
我正在使用Authlogic和rails_authorization_plugin.
有没有我可以在我的一个迁移文件中添加一个部分来添加此用户并为其分配角色root?或者我可以通过rake任务执行此操作吗?
任何见解将不胜感激!
我们从来没有让这个应用程序在生产中运行.应用程序在开发中运行得很好.我确保所有rake任务都是最新的,并为用户和所有人在所有论坛上发布的所有其他内容设置了acts_as_authentic.服务器已多次退回.所有URL上每次都会出现此错误.
详情如下:
NoMethodError in User_sessions#new
Run Code Online (Sandbox Code Playgroud)
显示第6行引发的app/views/user_sessions/new.html.erb:
undefined method `username' for #<UserSession: no credentials provided>
Extracted source (around line #6):
3: <% form_for @user_session, :url => user_session_path do |f| %>
4: <%= f.error_messages %>
5: <%= f.label :username %><br />
6: <%= f.text_field :username %><br />
7: <br />
8: <%= f.label :password %><br />
9: <%= f.password_field :password %><br />
Run Code Online (Sandbox Code Playgroud)
所以我走到了绳子的尽头.我读了很多Authlogic的赞美,但我花了几个小时试图让它一步一步地工作.我们必须启动这台服务器,但我们所做的一切都不会让这个错误消失.我们正在认真考虑现在虚拟化开发环境,以便用户可以完成某些工作.
有人有主意吗?
我慢慢地,但肯定地把我的第一个rails应用程序(实际上是第一个任何类型的web应用程序 - 我不是真正的程序员)放在一起,是时候设置用户注册/登录系统了.我的应用程序的性质是每个用户将完全与其他用户分开(管理员角色除外).当用户登录时,他们将拥有自己唯一的索引页面,仅查看他们和其他人无法看到或编辑的数据.但是,我稍后可能希望为用户添加一个角色,以便能够查看和编辑其他几个用户的数据(例如,一组用户可能希望允许他们的秘书访问和编辑他们的数据,但他们的秘书不需要任何数据他们自己).
我的计划是使用authlogic创建登录系统和声明权限来控制权限,但在我开始这个相当重要和关键的任务之前,我想我会就这个组合是否适合我设想的任务或者会有更好/更简单/更快/更便宜/更好的选择.
authorization login ruby-on-rails authlogic declarative-authorization
我几乎完全根据http://github.com/binarylogic/authlogic_example上的AuthLogic示例应用程序设置了AuthLogic .
在有人以用户身份登录后,他们可以单击将它们发送到系统并远离用户控制器的链接.这是一个令人难以置信的noob问题,但我如何从其他任何地方访问用户的ID和其他属性,例如无关的视图或不相关的控制器?
我想做的一个例子:
#matchings controller
@matching = Matching.find_by_user_id(user.id)
Run Code Online (Sandbox Code Playgroud) 我最近想在heroku上部署我的Rails应用程序,但是想要将它与外界隔离,直到我在heroku上测试它.为了屏蔽它,我使用了authenticate_or_request_with_http_basic.但是,在通过基本身份验证并希望登录(使用authlogic登录系统)后,我发现authlogic不记得会话(例如current_user == nil).
如果没有authenticate_or_request_with_http_basic before_filter,则authlogic会话可以正常工作.
有谁知道这是为什么以及如何让两者协同工作?
提前致谢.
PS:为了清楚起见,我的目标是不能将authlogic用户与authenticate_or_request_with_http_basic一起使用.
PPS:我使用Rails 3和git://github.com/odorcicd/authlogic.git
我在我的rails应用程序中实现了Authlogic,它的工作和测试非常好.用户可以登录,注销等
然而,因为我改变了我的方法在users_controller使用@current_user变量,没有我的用户的方法或形式(而不是"指数"等奇怪...)工作!
例如,这个"显示"方法可以工作并显示任何用户的用户配置文件(注意:我想最终以某种方式将此限制为当前登录的用户):
def show
@user = User.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
如果我遵循Authlogic rails cast和官方示例中显示的show方法:
def show
@user = @current_user
end
Run Code Online (Sandbox Code Playgroud)
我遇到各种各样的undefined method METHOD for nil:NilClass错误.尽管@current_user变量不包含任何用户信息.
我假设@current_user从current_user方法中提取信息,如下面的应用程序控制器中所定义:
def current_user
return @current_user if defined?(@current_user)
@current_user = current_user_session && current_user_session.record
end
Run Code Online (Sandbox Code Playgroud)
我错过了什么?我的预感是用户模型的User对象和current_user方法之间没有映射.任何帮助将不胜感激!
提前致谢!
〜丹
我正在创建一个应用程序,其中用户可以创建帐户然后随后登录的唯一方法是通过OAuth.
我只有一个 Oauth2身份验证源.
理想情况下,用户会在我的应用上按一个按钮,询问他们的Oauth凭据,如果他们不是用户,则开始创建用户个人资料.如果他们是用户,请将其登录.
我正在开发一个新的Rails 5(RC1)应用程序.我使用AuthLogic进行用户身份验证,它一如既往地运行良好,直到我进入ActionCable.
#app/channels/application_cable/connection.rb
module ApplicationCable
class Connection < ActionCable::Connection::Base
identified_by :current_user
def connect
self.current_user = UserSession.find
end
end
end
Run Code Online (Sandbox Code Playgroud)
我收到错误:您必须在创建对象之前使用控制器对象激活Authlogic :: Session :: Base.controller
我试过了:
Authlogic::Session::Base.controller = Authlogic::ControllerAdapters::RailsAdapter.new(self)
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为Connection类不是Controller.
我看一下AuthLogic代码,但我无法弄清楚如何绕过它对控制器对象的依赖.我只需要加载用户的会话.有什么想法吗?
authlogic ×12
ruby-on-rails ×11
ruby ×2
actioncable ×1
amazon-s3 ×1
cookies ×1
devise ×1
login ×1
methods ×1
migration ×1
oauth ×1
omniauth ×1
production ×1
rails-api ×1
rake ×1
undefined ×1
unit-testing ×1
variables ×1