Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs Axios未对API进行身份验证_Reactjs_Asp.net Core_Axios_Asp.net Core Webapi - Fatal编程技术网

Reactjs Axios未对API进行身份验证

Reactjs Axios未对API进行身份验证,reactjs,asp.net-core,axios,asp.net-core-webapi,Reactjs,Asp.net Core,Axios,Asp.net Core Webapi,我一整天都在试图从我的Asp.NETAPI获取数据,但是没有用。我登录并从服务器获取身份验证令牌并将其存储在本地,但当我尝试执行任何需要身份验证的操作时,服务器返回401响应。我的代码中有什么地方做错了吗?当我使用像postman这样的工具时,一切都正常,但我的应用程序中没有。 这是我的登录名 try { response = await API.post(AuthUrl, credentials) if(response.status >= 200 || resp

我一整天都在试图从我的Asp.NETAPI获取数据,但是没有用。我登录并从服务器获取身份验证令牌并将其存储在本地,但当我尝试执行任何需要身份验证的操作时,服务器返回401响应。我的代码中有什么地方做错了吗?当我使用像postman这样的工具时,一切都正常,但我的应用程序中没有。 这是我的登录名

try {
      response = await API.post(AuthUrl, credentials)
      if(response.status >= 200 || response.status <= 299){
        let Auth = {
          Username: response.data.Username,
          Roles: response.data.Roles,
          Expires: response.data.Expires,
          Token: response.data.Token
        };
        localStorage.setItem(window.location.host, JSON.stringify(Auth));
    }
}
这就是我消费它的方式

try{
                const response = await API.get(getUrl)
                setLoading(false);
               //........Do something with response
}

这是服务器上记录的内容

Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request starting HTTP/2.0 GET https://localhost:44307/api/classes/getclasses/  
Microsoft.AspNetCore.Cors.Infrastructure.CorsService:Information: CORS policy execution successful.
Microsoft.AspNetCore.Routing.EndpointMiddleware:Information: Executing endpoint 'SchoolManager.Web.Controllers.ClassesController.GetClasses (SchoolManager.Web)'
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Route matched with {action = "GetClasses", controller = "Classes", page = "", area = ""}. Executing controller action with signature System.Collections.Generic.IEnumerable`1[SchoolManager.Dtos.Tenancy.ClassDto] GetClasses(System.String, System.String) on controller SchoolManager.Web.Controllers.ClassesController (SchoolManager.Web).
Microsoft.AspNetCore.Cors.Infrastructure.CorsService:Information: CORS policy execution successful.
Microsoft.AspNetCore.Authorization.DefaultAuthorizationService:Information: Authorization failed.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Authorization failed for the request at filter 'Microsoft.AspNetCore.Mvc.Authorization.AuthorizeFilter'.
Microsoft.AspNetCore.Mvc.ChallengeResult:Information: Executing ChallengeResult with authentication schemes (Bearer).
Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler:Information: AuthenticationScheme: Bearer was challenged.
Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker:Information: Executed action SchoolManager.Web.Controllers.ClassesController.GetClasses (SchoolManager.Web) in 146.8824ms
Microsoft.AspNetCore.Routing.EndpointMiddleware:Information: Executed endpoint 'SchoolManager.Web.Controllers.ClassesController.GetClasses (SchoolManager.Web)'
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 218.2724ms 401 

axios.create方法的使用方式不正确。 参考:

文档清楚地显示config
auth:
指示应该使用HTTP Basic auth,并提供凭据。对于承载令牌等,请使用
授权
自定义头,以便在您的情况下可以执行类似操作

export default axios.create({
baseURL: BaseUrl,
responseType: "json",
headers: {'Authorization': "bearer " + JSON.parse(localStorage.getItem(window.location.host)).Token}})

axios.create方法的使用方式不正确。 参考:

文档清楚地显示config
auth:
指示应该使用HTTP Basic auth,并提供凭据。对于承载令牌等,请使用
授权
自定义头,以便在您的情况下可以执行类似操作

export default axios.create({
baseURL: BaseUrl,
responseType: "json",
headers: {'Authorization': "bearer " + JSON.parse(localStorage.getItem(window.location.host)).Token}})

可能是CORS的问题。您是否从我的API端点进行了检查,它显示CORS已成功执行,但随后无法通过身份验证。我认为身份验证令牌没有被发送到服务器。不过,当我在其上放置断点时,将从
localStorage
检索令牌。看一看我编辑的日志,这当然是一个科里斯苏。您还必须在服务器中启用CORS,并尝试将responseType更改为application/json。此外,Postman并不关心CORS请求。但是您是否知道服务器正在接受身份验证请求并发回令牌?或者有没有比使用axios更好的方法来执行API请求和保存会话?我的react应用程序只是一个API消费者。它本身没有任何应用程序逻辑。可能是CORS问题。您是否从我的API端点进行了检查,它显示CORS已成功执行,但随后无法通过身份验证。我认为身份验证令牌没有被发送到服务器。不过,当我在其上放置断点时,将从
localStorage
检索令牌。看一看我编辑的日志,这当然是一个科里斯苏。您还必须在服务器中启用CORS,并尝试将responseType更改为application/json。此外,Postman并不关心CORS请求。但是您是否知道服务器正在接受身份验证请求并发回令牌?或者有没有比使用axios更好的方法来执行API请求和保存会话?我的react应用程序只是一个API消费者。它没有自己的任何应用程序逻辑。