Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Rails: Return a 401?

I'd like to return a HTTP 401 error as part of my permission_denied method for declarative_authorization.

# triggered when a user accesses a page that they don't have access to
def permission_denied
  # render my default 401 error page?
end

How would I do this? (Pardon the question if it's stupid... I know how to render the 401.html page in my public directory, but I don't think it returns the 401 HTTP header, which is what I'm after.)

like image 587
neezer Avatar asked Jan 16 '10 00:01

neezer


2 Answers

You can add the :status option

def permission_denied
  render :file => "public/401.html", :status => :unauthorized
end
like image 128
Garrett Avatar answered Nov 07 '22 19:11

Garrett


Here so you don't have to dig through comments for a modern answer.

The previous answer has been deprecated in Rails 5.1

Throw any of these into your controller action:

Render A File/Template

render :file => "public/401", :status => :unauthorized

Render JSON

render status: :unauthorized, json: { error: "You are not authorized to access this resource. Verify that you are passing passing your token." }

Render Nothing

head :unauthorized

See ActionController#head

like image 39
CTS_AE Avatar answered Nov 07 '22 20:11

CTS_AE