为啥我得到“没有访问控制允许来源”

Posted

技术标签:

【中文标题】为啥我得到“没有访问控制允许来源”【英文标题】:Why i am getting 'No Access-Control-Allow-Origin'为什么我得到“没有访问控制允许来源” 【发布时间】:2020-03-10 10:13:09 【问题描述】:

我收到此错误“从源“http://127.0.0.1:8000”访问 XMLHttpRequest 在“http://localhost/api/auth/register”已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:没有“访问控制-请求的资源上存在 Allow-Origin' 标头。"

<template>
    <div class="container mt-2">
                <form autocomplete="off" @submit.prevent="register" method="post">
                    <div class="form-group" v-bind:class=" 'has-error': has_error && errors.email ">
                        <label for="email">E-mail</label>
                        <input type="email" id="email" class="form-control bg-light border-0 small" placeholder="user@example.com" v-model="email">
                        <span class="help-block" v-if="has_error && errors.email"> errors.email </span>
                    </div>
                    <div class="form-group" v-bind:class=" 'has-error': has_error && errors.password ">
                        <label for="password">Password</label>
                        <input type="password" id="password" class="form-control bg-light border-0 small" v-model="password">
                        <span class="help-block" v-if="has_error && errors.password"> errors.password </span>
                    </div>
                    <div class="form-group" v-bind:class=" 'has-error': has_error && errors.password ">
                        <label for="password_confirmation">Conform Password</label>
                        <input type="password" id="password_confirmation" class="form-control bg-light border-0 small" v-model="password_confirmation">
                    </div>
                     <div class="alert alert-danger" v-if="has_error && !success">
                      <p v-if="error == 'registration_validation_error'">Validation error</p>
                      <p v-else>Please fill all the fields to get registered</p>
                     </div>
                     <input type="hidden" name="_token" :value="csrf">
                    <div class="text-center pb-3">
                    <button type="submit" class="btn btn-success btn-sm" style="background-color:#00A7F5;border:none;">Register</button>
                    </div>
          </form>
    </div>
</template>
<script>
  export default 
    data() 
      return 
        email: '',
        password: '',
        password_confirmation: '',
        csrf: document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
        has_error: false,
        error: '',
        errors: ,
        success: false
      
    ,
    methods: 
      register() 
        var app = this
        this.$auth.register(
          data: 
            email: app.email,
            password: app.password,
            password_confirmation: app.password_confirmation
          ,
          success: function () 
            app.success = true
          ,
          error: function (res) 
            app.has_error = true
            app.error = res.response.error
            app.errors = res.response.errors || 
          
        )
      
    
  
</script>

如果失败,来自控制器的响应

 $a = Validator::make($request->all(), [
            'email' => 'required|email|unique:users',
            'password'  => 'required|min:6|confirmed',
        ]);
 if ($a->fails())
        
            return response()->json([
                'status' => 'error',
                'errors' => $a->errors()
            ], 422);
        

如果一切正常,那么

return response()->json(['status' => 'success'], 200);

请让我知道这有什么问题,有没有更好的方法来处理错误。请分享链接,我无法正确处理错误。 感谢所有帮助。

【问题讨论】:

【参考方案1】:

CORS 策略严格检查域和端口。因此,使两者相同将是解决方案。

【讨论】:

我该怎么做? 在同一站点地址下托管服务。 CORS 解决方案不是一个好的选择。对于一个小项目,这是不必要的。对于大型项目,安全性很简单。【参考方案2】:

你需要在你的项目中添加 CORS 服务提供者,像这样:https://github.com/barryvdh/laravel-cors

【讨论】:

以上是关于为啥我得到“没有访问控制允许来源”的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2,没有“访问控制允许来源”

跨浏览器没有“访问控制允许来源”

没有“访问控制允许来源”-CORS

访问被 CORS 策略阻止:没有“访问控制允许来源”

jQuery - 没有访问控制允许来源

react-admin 没有'访问控制允许来源'