我正在通过超薄框架和它的slim-jwt-auth中间件构建应用程序。
我安装了它,它工作正常,但我对直通可能性感到有些困惑。
我的RequestPathRule:
new \Slim\Middleware\JwtAuthentication\RequestPathRule([
"path" => ["/api"],
"passthrough" => ["/api/auth", "/api/users", "/api/products", "/api/orders", "/api/streets",
"/api/reservations", "/api/feedbacks", "api/menu"]
])
我的RequestMethodRule:
new \Slim\Middleware\JwtAuthentication\RequestMethodRule([
"passthrough" => ["POST", "GET"]
])
但是它允许这些方法适用于所有端点。实际上,我想仅对/api/auth
,/api/orders
,/api/reservations
和/api/feedbacks
以及除/api/users
以外的每个端点的GET进行POST。
这怎么可能?
提前谢谢。
答案 0 :(得分:2)
看看你的路线是哪个很有意思,但基本上你当前的配置是:
1)DON' T认证" / api / auth"," / api / users"," / api / products",&#34 ; / api / orders"," / api / streets"," / api / reservations"," / api / feedbacks"和" api / menu" (/ api下的其余端点必须通过身份验证)
2)并且也不要验证任何POST或GET请求
一些例子:
PUT /api/users
自从/ api / users进入后,永远不会进行身份验证
RequestPathRule GET /api/users
自从/ api / users进入后,永远不会进行身份验证
RequestPathRule AND GET在RequestMehtodRule PUT /api/whatever
自/ api / users以来,总是会进行身份验证
不在RequestPathRule中AND
GET不在RequestMethodRule 基本上规则像OR比较运算符一样工作,并且在适当的时候端点在RequestPathRule中,或者请求方法在RequestMethodRule中,请求将不被验证。
更好的方法可能是尝试尽可能不使用RequestMethodRule(通常只包括OPTIONS方法)并使用不同的路径。
在普通的网络应用程序中,您将在/api
下为您的客户提供公共API路径,并且您通常不会通过身份验证的唯一端点是/api/login
(或/api/auth
in您的示例)/api
下的其余端点已经过身份验证。如果您提供另一组您不想要进行身份验证的端点,则提供另一个不同的路径,例如/service
,并且不要将其包含为"路径"在RequestPathRule中。如果您需要一组端点ALL经过身份验证,则在新路径下创建所有端点,让我们说/admin
并在RequestPathRule中包含路径,并且不要添加任何"直通"对他们来说。
所以这个想法是使用不同的路径,只需在RequestMethodRule下为特定用例添加这些方法。此外,通过这种方式,您将获得更清晰,更有条理的API。
查看您的终点我建议您为大多数终端创建不同的路径,因此不要使用" / api / auth"," / api / users"," / api / products"," / api / orders"我建议你有" / auth"," / user"," / product"," / order" ...和你一起可以为每条路径添加RequestPathRule
和RequestMethodRule
。
老实说,正如认为slim-jwt-auth中间件一样,在同一端点上提供CRUD操作很困难,让我们说你有{{GET,POST,PUT和DELETE} {{ 1}}并且您只想验证POST,PUT和DELETE。对于这种情况,您可以有两个选项:
/user
,GET /user/all
,POST /user/add
和PUT /user/edit
(这是一种不好的做法DELETE /user/delete
和RequestPathRule
可调用的唯一条件,他们必须实施RequestMethodRule
并根据您的需求进行调整(强烈推荐)如果选择第二个选项,则只需将那些可调用项添加到RuleInterface
选项中。像这样:
rules