加载Rails控制台后,我该如何登录用户?
Devise提供了一个测试助手,可以在测试中使用,我试图在控制台中使用:
>> include Devise::TestHelpers
>> helper.sign_in(User.first)
Run Code Online (Sandbox Code Playgroud)
但我得到:
NoMethodError: undefined method `env' for nil:NilClass
Run Code Online (Sandbox Code Playgroud)
无论如何,我想使用真正的设计助手而不是这个测试助手.有没有办法实现这个目标?
我已将Devise添加到我的Rails 4应用程序中,并成功将用户名等添加到我的用户模型中.此外,我能够使用lazy way™存储这些字段,即
class ApplicationController < ActionController::Base
before_filter :configure_permitted_parameters, if: :devise_controller?
protected
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
end
end
Run Code Online (Sandbox Code Playgroud)
但是,我试过了
def configure_permitted_parameters
devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
devise_parameter_sanitizer.for(:edit) { |u| u.permit(:email, :password, :password_confirmation, :firstname, :middlename, :lastname) }
end
Run Code Online (Sandbox Code Playgroud)
但是这并没有像预期的那样工作(编辑动作调用时没有存储用户名).为了让它发挥作用,我还需要做些什么吗?谢谢!
我已经为我的Rails应用程序(3.0.1)安装了Devise,它主要用于工作.我似乎无法自定义邮件程序视图.
app/controllers/users/,就像这样app/controllers/users/sessions_controller.rbapp/views/users/这样的app/views/users/registrations/new.html.haml
devise_for :users, :controllers => {
:sessions => "users/sessions",
:registrations => "users/registrations",
:passwords => "users/passwords",
:confirmations => "users/confirmations",
:unlocks => "users/unlocks"
} do
get "/login" => "devise/sessions#new"
get "/logout" => "devise/sessions#destroy"
end
至少在上面的一切都有效.但是,在发送邮件时,Devise似乎使用的模板不是我编辑过的模板app/views/users/mailer/.设计似乎仍然是默认的(好像我从未编辑过文件).我猜测Devise仍然使用gem中的文件.
如果它有帮助,这是黄瓜错误:
Feature: Manage accounts
In order to manage accounts
users
should be able to signup
# By default, www.example.com is the host when testing.
# This is a problem because when our …Run Code Online (Sandbox Code Playgroud) 我有一个Rails 4应用程序设置为使用Devise,我正在运行密码重置问题.我有邮件设置,密码重置电子邮件发送正常.提供的链接具有分配给它的正确reset_password_token,我使用该数据库检查了该链接.但是,当我使用格式正确的密码提交表单时,会出现错误,指出重置令牌无效.
但是,完全相同的代码在本地工作正常rails s.电子邮件发送,我实际上可以重置密码.我使用的代码只是标准的Devise代码,我没有覆盖任何代码.
也许这与Apache有关?我不太熟悉它.有没有人有任何想法?
我有一个表单,我在Rails中收集了大量信息.此表单的一部分是要注册的新用户的字段.由于Devise具有专门用于创建新用户的控制器/操作,因此我不知道如何以完全不同的操作以编程方式创建用户,同时创建另一个记录.我真的不能将用户注册表分开.我无法弄清楚如何创建用户,然后记录用户,就像我在Authlogic中可以轻松做的那样.
我使用了Authlogic和Devise,并认为每个都有自己的优点和缺点.有了Devise,我喜欢用新项目"开始"的速度有多快,但定制它似乎很痛苦.一段时间后,Authlogic对Rails 3有很多问题,我转而使用Devise.我现在正在开发一个新项目并从头开始.
所以我认为这个问题有2个可能的答案:(a)如何在Devise中做到这一点,或者(b)为什么我应该用Rails 3切换到Authlogic.
我正在尝试为iPhone应用程序构建rails API.Devise适用于通过Web界面登录,但我需要能够使用REST API创建和销毁会话,我想使用JSON而不必在会话控制器上执行POST并且必须解析HTML并处理重定向.
我以为我可以这样做:
class Api::V1::SessionsController < Devise::SessionsController
def create
super
end
def destroy
super
end
end
Run Code Online (Sandbox Code Playgroud)
在config/routes.rb中我添加了:
namespace :api do
namespace :v1 do
resources :sessions, :only => [:create, :destroy]
end
end
Run Code Online (Sandbox Code Playgroud)
rake路由显示路由设置正确:
api_v1_sessions POST /api/v1/sessions(.:format) {:action=>"create", :controller=>"api/v1/sessions"}
api_v1_session DELETE /api/v1/sessions/:id(.:format) {:action=>"destroy", :controller=>"api/v1/sessions"}
Run Code Online (Sandbox Code Playgroud)
当我发布到/ user/sessions时,一切正常.我得到一些HTML和302.
现在如果我发布到/ api/v1/sessions我得到:
未知的操作AbstractController :: ActionNotFound
curl -v -H 'Content-Type: application/json' -H 'Accept: application/json' -X POST http://localhost:3000/api/v1/sessions -d "{'user' : { 'login' : 'test', 'password' : 'foobar'}}"
Run Code Online (Sandbox Code Playgroud) 我的应用程序使用的是Rails 3.0.4和Devise 1.1.7.
我正在寻找一种方法来阻止用户共享帐户,因为该应用程序是基于订阅的服务.我已经搜索了一个多星期,我仍然不知道如何实施解决方案.我希望有人已经实施了一个解决方案,可以指出我正确的方向.
解决方案(谢谢大家的答案和见解!)
在应用程序controller.rb中
before_filter :check_concurrent_session
def check_concurrent_session
if is_already_logged_in?
sign_out_and_redirect(current_user)
end
end
def is_already_logged_in?
current_user && !(session[:token] == current_user.login_token)
end
Run Code Online (Sandbox Code Playgroud)
在session_controller中重写Devise Sessions控制器:
skip_before_filter :check_concurrent_session
def create
super
set_login_token
end
private
def set_login_token
token = Devise.friendly_token
session[:token] = token
current_user.login_token = token
current_user.save
end
Run Code Online (Sandbox Code Playgroud)
在迁移AddLoginTokenToUsers
def self.up
change_table "users" do |t|
t.string "login_token"
end
end
def self.down
change_table "users" do |t|
t.remove "login_token"
end
end
Run Code Online (Sandbox Code Playgroud) 如何禁用所有Devise gem flash消息("已成功登录","您已注销")?谢谢.
我正在尝试创建一个用户show页面(将用作个人资料页面)但我对如何使用Devise这样做感到困惑.似乎Devise没有任何类型的show定义 - 有没有什么方法可以访问Devise正在实现的控制器,以便制作一个或者我必须覆盖它们?
我正在开发一个rails web应用程序,它还为移动设备提供基于JSON的API.移动客户端应首先获得带有(email/pass)的令牌,然后客户端将使用令牌进行后续API调用.
我是Devise的新手,我正在寻找一个Devise API看起来authenticate(email, pass)并期望它返回true/false,然后根据我将创建并交回令牌或返回拒绝消息.但似乎Devise没有提供这样的东西.
我知道Devise 1.3提供了基于JSON的auth,但这与我需要的有点不同 - 我需要生成令牌并处理回客户端,然后在使用令牌完成auth之后.
有人可以给点指点吗?