2013-02-12 48 views
9

我一直在我的应用程序中使用Devise的宝石。我能够 配置devise sessions_controller来响应来自web的请求和来自移动API调用的 。忘记密码设计宝石API

但是现在我想知道如何使用Devise gem 的Forgot Password选项进行Mobile API调用。我可以使用API​​登录,如下所示:

curl -X POST 'http://localhost:3002/users/sign_in.json' -d 'user[email][email protected]&user[password]=123456' 

我可以使用忘记密码吗?

+0

嗨@balanv,我正在寻找使用设计的web和api认证。我能知道你是如何制定出来的吗?提前致谢。 – 2013-05-21 11:36:01

+0

@SagarBommidi:请将此作为单独问题发布,我可以为您提供解答。 – balanv 2014-04-01 06:51:52

+0

是不是涵盖在设计宝石中的可恢复模块? – BKSpurgeon 2018-02-04 22:30:36

回答

17

得到了答案。

1)创建其临危email作为输入

2自定义操作)添加以下代码

@user = User.find_by_email("[email protected]") 
if @user.present? 
@user.send_reset_password_instructions 
render :text => "updated" 
else 
    render :text => "no such email" 
end 
+1

优秀!!!!!!! – 2013-10-16 16:12:06

+3

无论用户是否存在,您最好不要渲染相同的消息。就像这样,这个动作可以用来捕获有效的用户帐户。 – 2014-05-28 17:07:10

+1

克里斯好! – balanv 2014-05-29 09:19:53

1

我这样做:

config/routes.rb

namespace :api do 
    namespace :v1 do 
    resources :reset_passwords, only: [:index, :create] 
    end 
end 

和在app/controllers/api/v1/reset_passwords_controller.rb

class Api::V1::ResetPasswordsController < Api::V1::BaseController 
    def index 
    user = User.find_by_email(user_params) 
    if user.present? 
    user.send_reset_password_instructions 
    render(
      json: "{ \"result\": \"Email already exists\"}", 
      status: 201 
     ) 
    else 
     render(
      json: "{ \"error\": \"Not found\"}", 
      status: 404 
     ) 
    end 
    end 

    private 

    def user_params 
    params.require(:email) 
    end 

end