RustでWebアプリを作るとき今はActixWebを使っている。
corsやAuth周りでまだそこそこエラーが発生する印象。
今回は、actix_web_httpauthを使っていてコンパイルに失敗したときの解決策の書き溜め。
解決策
ActixWebのバージョンが古いかも。
4系に上げたら動いた。
CORSのバグ修正など、betaで動いているのが多いんだよね... (2021/12現在)
現象
生じたエラーは下記。
Bearer認証を組み込もうとしたらコンパイルに失敗。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
``` error[E0631]: type mismatch in function arguments --> src/main.rs:257:47 | 75 | async fn validator(req: ServiceRequest, _credentials: BearerAuth) -> Result<ServiceRequest, ActixError> { | ------------------------------------------------------------------------------------------------------- found signature of `fn(ServiceRequest, BearerAuth) -> _` ... 257 | let auth = HttpAuthentication::bearer(validator); | ^^^^^^^^^ expected signature of `fn(actix_web::service::ServiceRequest, BearerAuth) -> _` | note: required by `HttpAuthentication::<BearerAuth, F>::bearer` --> /home/noffuy/.cargo/registry/src/github.com-1ecc6299db9ec823/actix-web-httpauth-0.6.0-beta.4/src/middleware.rs:112:5 | 112 | pub fn bearer(process_fn: F) -> Self { | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 1 [package] error[E0277]: the trait bound `HttpAuthentication<BearerAuth, fn(ServiceRequest, BearerAuth) -> impl std::future::Future {validator}>: Transform<actix_web::app_service::AppRouting>` is not satisfied --> src/main.rs:260:19 | 260 | .wrap(auth) | ^^^^ the trait `Transform<actix_web::app_service::AppRouting>` is not implemented for `HttpAuthentication<BearerAuth, fn(ServiceRequest, BearerAuth) -> impl std::future::Future {validator}>` ``` |
じゃあね〜〜〜。