-
Notifications
You must be signed in to change notification settings - Fork 51
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Ecto.Query.CastError when :id is not an integer / does not match the field type #69
Comments
You might be able to accomplish what you're looking for with https://github.com/cpjk/canary#specifing-database-field However, if you want a more custom authorization solution, it is fairly simple to do it yourself using custom plugs (and Canada as well if you like the |
Sorry for any confusion, @cpjk. What I meant was that if someone using canary with the default id field, which, in Ecto, only supports numbers, if a string is passed in the id field, Canary throws an exception in the plug before we're able to even catch / wrap it. We'd have to build a plug ahead of Canary for all connections to make sure the ID field isn't a string, which seems a little crazy. I would suggest having Canary catch common exceptions like this, especially if it's just for a simple web app that uses basic Phoenix routing with object ids in the url, since the urls would be very susceptible to having bad IDs. It is just a shame to see a server crash for something like this. |
Ah, I understand. What do you think would be the appropriate catching behaviour from canary? |
I think a 422, unprocessable entity, is the right exception for the error handler to receive. 400 means the HTTP request was faulty, but 422 means that the request cannot be served as requested. It says less than 404 or 403, in my mind. |
If I put in "/users/foo", Canary will throw an exception in trying to access the resource as "foo" is clearly not an acceptable
where
query forid
.This exception should be caught and we should have an
:unprocessable_entity
handler in the error controller, rather than letting the application implode.The text was updated successfully, but these errors were encountered: