我有一个 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);
}
}
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:GpyF4XKuxMqCfkylHfdsfFDSjfasdfFDgfsdGfdsFGffhg=
APP_URL=http://localhost
LOG_CHANNEL=stack
DB_CONNECTION=sqlite
...
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
应用程序与HeaderName
和Headervalue
,然后你可以使用上面的代码。
谢谢。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句