Rails Devise current_user is undefined in a matches? advanced route constraint

后端 未结 3 578
深忆病人
深忆病人 2021-01-05 14:35

I get an error NameError (undefined local variable or method \"current_user\" for #): when I try to use current_user in a

3条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-01-05 15:08

    current_user is only available in your controllers and views. There is more than one way to achieve what you want, the easier being supplying it as a parameter to your method.

    EDIT

    if current_user if accessible in the router, you can pass it to your constraints class by doing constraints: APIRouter.new(current_user). Then you need to define APIRouter#initialize and store the current_user in an instance var that you can use in matches?.

    EDIT 2

    I just remembered devise allows you to do this in your router :

    authenticated :user do
      root :to => "main#dashboard"
    end
    

    I don't know how to ensure that user.is_test though.

    EDIT 3

    Last attempt. request.env["warden"].user(:user) should give you a user if one is authenticated.

提交回复
热议问题