ruby on rails - Devise AJAX - POST request : current_user is null -
i try develop single page application authentication. use devise (rails) , angularjs. different reasons rails application , angularjs application not on same server. so, have handle cross domain issues... , can't send x-csrf-token in header. can correctly sign in , sign out , send request without problem. in rails controllers, can use current_user, it's correctly set. however, when send post request, current_user null. seems session_id not sent. problem due cross domain, because if send ajax request same server, ok.
i think, have 2 solutions : - don't use authentication cookie-based, use token - put front-end , back-end on same server.
other ideas ? why current_user null when send post request cross domain ?
you send csrf token in headers it's bad practice exposes security holes (issue thread on github explaining why)
safest way go disable csrf together:
class applicationcontroller < actioncontroller::base # or use api::basecontroller < applicationcontroller if namespacing # prevent csrf attacks raising exception. # apis, may want use :null_session instead. protect_from_forgery with: :null_session end
and use token based authentication can either implement yourself or use devise's :token_authenticatable. have configure angularjs send token either in params or headers. here's snippet use having rails figure out if token in headers or params.
class api::basecontroller < applicationcontroller prepend_before_filter :get_auth_token private def get_auth_token if auth_token = params[:auth_token].blank? && request.headers["x-auth-token"] params[:auth_token] = auth_token end end end
so in end how works is:
- client uses login method defined authenticate
- obtains authentication token server
- uses token in each subsequent request purpose of authorization
Comments
Post a Comment