如何在 Laravel 中验证 HTTP 请求

fs_tigre

我有一个 iOS 应用程序,它向使用 Laravel 的服务器/站点发出 HTTP 请求,一切正常,但我想在返回任何信息之前验证 HTTP 请求。现在它的工作方式是您键入example.com/zip-code/51751并且服务器响应请求,我想要的是让服务器仅响应来自 iOS 应用程序的请求。我在想的是key/token在我的 iOS 应用程序和 Laravel 应用程序中硬编码一个随机,然后将该密钥作为我的 HTTP 请求的一部分,以便我可以检查请求以查看请求中的密钥是否与键入服务器(.env文件)。

这是我目前拥有的代码,它可以正常工作但不能进行验证。

路由文件

Route::get('zip-code/{zipCode}', 'MyController@placeDescription');

控制器

class MyController extends Controller
{
    public function placeDescription($zipCode)
    {     
        $placeInfo = InfoDB::where('ZipCode', $zipCode)->get();
        return ($placeInfo);
    }
}

.env 文件

APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:GpyF4XKuxMqCfkylHfdsfFDSjfasdfFDgfsdGfdsFGffhg=
APP_URL=http://localhost

LOG_CHANNEL=stack
DB_CONNECTION=sqlite
...

iOS 应用程序 / Swift

func descriptionForCurrentLocation(zipCode: String, completion:@escaping(_ placeDescription:String?) -> () ){
    
    let siteLink = "http://example.com/zip-code/" + zipCode
    let url = URL(string: siteLink)
    
    let task = URLSession.shared.dataTask(with: url!) { data, response, error in
        
        guard error == nil else {
            // ERROR
            completion(nil)
            return
        }
        guard let data = data else {
            // Return, data is empty 
            completion(nil)
            return
        }
        let json = try! JSONSerialization.jsonObject(with: data, options: [])

        guard let jsonArray = json as? [[String: String]] else {
            // Return, the object returned by the server is not in the right format.
            return
        }

        if jsonArray.isEmpty{
            // Return, array is empty.
            return
        }else{
            let description = jsonArray[0]["CityDescription"]!
            completion(description)
        }
    }
    task.resume()
}

如何根据随机密钥验证 HTTP 请求?

编辑:

仅作为记录,我在 iOS 应用程序中添加了 HTTP 标头。有关Salman Zafar如何在 Laravel 中进行验证的详细信息,请参阅s answer。

    let siteLink = "http://example.com/zip-code/" + zipCode
    let url = URL(string: siteLink)
    
    var request = URLRequest(url: url!)
    request.setValue("161jshghss", forHTTPHeaderField: "CustomKey")
    
    let task = URLSession.shared.dataTask(with: request) { data, response, error in 
    ... 
萨尔曼·扎法尔

您可以生成一个uuid用于验证请求并验证您可以使用以下代码的请求

use Illuminate\Http\Request;

class MyController extends Controller
{
    public function placeDescription(Request $request, $zipCode)
    { 
       if($request->hasHeader('CustomKey') && $request->header('CustomKey') === "161jshghss")
       {
        $placeInfo = InfoDB::where('ZipCode', $zipCode)->get();
        return ($placeInfo);
       }
       else
       {
         return response(['error' => 'Something is missing'], 403);
       }  
     }
}

你必须设置Custom Header你的ios应用程序与HeaderNameHeadervalue,然后你可以使用上面的代码。

谢谢。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章