标签: devise

如何使用Rails控制台中的Devise登录用户?

加载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)

无论如何,我想使用真正的设计助手而不是这个测试助手.有没有办法实现这个目标?

console ruby-on-rails devise

50
推荐指数
3
解决办法
2万
查看次数

如何为编辑操作指定devise_parameter_sanitizer?

我已将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)

但是这并没有像预期的那样工作(编辑动作调用时没有存储用户名).为了让它发挥作用,我还需要做些什么吗?谢谢!

devise strong-parameters ruby-on-rails-4

50
推荐指数
4
解决办法
3万
查看次数

Ruby/Rails:如何自定义Devise的邮件模板?

我已经为我的Rails应用程序(3.0.1)安装了Devise,它主要用于工作.我似乎无法自定义邮件程序视图.

  • 我的用户模型是"用户".
  • 设计控制器(我需要覆盖,所以我可以告诉控制器使用什么布局文件)app/controllers/users/,就像这样app/controllers/users/sessions_controller.rb
  • 设计视图(我编辑过的)就是app/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)

ruby-on-rails devise

48
推荐指数
3
解决办法
3万
查看次数

Rails 4 + Devise:密码重置始终在生产服务器上提供"令牌无效"错误,但在本地工作正常.

我有一个Rails 4应用程序设置为使用Devise,我正在运行密码重置问题.我有邮件设置,密码重置电子邮件发送正常.提供的链接具有分配给它的正确reset_password_token,我使用该数据库检查了该链接.但是,当我使用格式正确的密码提交表单时,会出现错误,指出重置令牌无效.

但是,完全相同的代码在本地工作正常rails s.电子邮件发送,我实际上可以重置密码.我使用的代码只是标准的Devise代码,我没有覆盖任何代码.

也许这与Apache有关?我不太熟悉它.有没有人有任何想法?

ruby-on-rails devise ruby-on-rails-4

48
推荐指数
3
解决办法
2万
查看次数

如何在Devise中手动创建新的用户和用户会话?

我有一个表单,我在Rails中收集了大量信息.此表单的一部分是要注册的新用户的字段.由于Devise具有专门用于创建新用户的控制器/操作,因此我不知道如何以完全不同的操作以编程方式创建用户,同时创建另一个记录.我真的不能将用户注册表分开.我无法弄清楚如何创建用户,然后记录用户,就像我在Authlogic中可以轻松做的那样.

我使用了Authlogic和Devise,并认为每个都有自己的优点和缺点.有了Devise,我喜欢用新项目"开始"的速度有多快,但定制它似乎很痛苦.一段时间后,Authlogic对Rails 3有很多问题,我转而使用Devise.我现在正在开发一个新项目并从头开始.

所以我认为这个问题有2个可能的答案:(a)如何在Devise中做到这一点,或者(b)为什么我应该用Rails 3切换到Authlogic.

ruby-on-rails authlogic devise ruby-on-rails-3

47
推荐指数
2
解决办法
6万
查看次数

扩展Devise SessionsController以使用JSON进行身份验证

我正在尝试为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)

ruby authentication ruby-on-rails devise

47
推荐指数
4
解决办法
3万
查看次数

设计每次限制每个用户一个会话

我的应用程序使用的是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)

session ruby-on-rails devise ruby-on-rails-3

47
推荐指数
2
解决办法
2万
查看次数

Rails禁用设计Flash消息

如何禁用所有Devise gem flash消息("已成功登录","您已注销")?谢谢.

ruby-on-rails devise

45
推荐指数
4
解决办法
2万
查看次数

使用Devise创建`Users`显示页面

我正在尝试创建一个用户show页面(将用作个人资料页面)但我对如何使用Devise这样做感到困惑.似乎Devise没有任何类型的show定义 - 有没有什么方法可以访问Devise正在实现的控制器,以便制作一个或者我必须覆盖它们?

ruby-on-rails show devise

45
推荐指数
3
解决办法
3万
查看次数

设计API身份验证

我正在开发一个rails web应用程序,它还为移动设备提供基于JSON的API.移动客户端应首先获得带有(email/pass)的令牌,然后客户端将使用令牌进行后续API调用.

我是Devise的新手,我正在寻找一个Devise API看起来authenticate(email, pass)并期望它返回true/false,然后根据我将创建并交回令牌或返回拒绝消息.但似乎Devise没有提供这样的东西.

我知道Devise 1.3提供了基于JSON的auth,但这与我需要的有点不同 - 我需要生成令牌并处理回客户端,然后在使用令牌完成auth之后.

有人可以给点指点吗?

ruby api json ruby-on-rails devise

45
推荐指数
1
解决办法
2万
查看次数