2014-02-14 42 views
2

我尝试配置我的rails应用程序,以便能够通过JSON请求执行sign_in(该部分看起来工作),之后我不想被重定向,我只需要sign_in给我一个带有用户电子邮件和其他东西的JSON。设计不想在sign_in后返回JSON

有人可以告诉我该怎么做吗? 我用这个宝石token authentication和设计使用轨道的最后一个版本。

目前我已经创建了一个自定义会话控制器,但我不知道要放在里面。 我是新来的铁路,所以也许这很容易,但我无法找到最新的答案。

感谢的

UPDATE:有关我的主要目标是sign_in成功

回答

2

覆盖会议结束后取回相关用户的身份验证令牌创建设计的方法:: SessionsController

添加控制器文件在app/controllers/users/sessions_controller.rb中,并继承Devise :: SessionsController,如下所示。

class Users::SessionsController < Devise::SessionsController 

    def create 
    self.resource = warden.authenticate!(auth_options) 
    set_flash_message(:notice, :signed_in) if is_flashing_format? 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, :location => after_sign_in_path_for(resource) do |format| 
     format.json {render :json => resource } # this code will get executed for json request 
    end 
    end 

end 

加入以下航线需要考虑继承的用户:: SessionsController

devise_for :users, :controllers => { :sessions => 'users/sessions'} 
+0

感谢您的答案,但当我这样做时,我总是有一个重定向,在这里我的控制台日志https://gist.github.com/anonymous/8998390我只是发送放置请求/用户/ sign_in与以下数据https://gist.github.com/anonymous/8998402 –

+0

“处理通过Api :: SessionsController#创建为*/*”,尝试启动JSON请求,它应该登录到日志文件为“Processing by Api :: SessionsController#创建为JSON“。我早已做了同样的事情,幸运的是,到今天为止,我还得重新做同样的事情。因此,即使在将请求类型更改为JSON之后,我也会知道您是否会遇到任何问题。 – Allerin

+0

我的请求与 curl -XPOST -H“Content-Type:application/json”“http:// localhost:3000/users/sign_in”-d'{“user”:{“email”:“test @ a.fr“,”password“:”12345678“}}' 但是仍然无法正常工作,没有办法通过”Api :: SessionsController#create as */* as JSON“来处理。 –

1

您还可以使用屈服块创建额外的代码,并击中重定向命令

def create 
    super do 
    render json: { user: current_user, 
        token: form_authenticity_token }.to_json and return 
    end 
end 
之前返回

and return将停止控制器在收益块之后继续。

form_authenticity_token - 我必须在登录后重置标头中的csrf标记。这是获取新的csrf令牌的一种方法。