我正在开发 iOS 应用程序
我自己制作了 POST API。
现在,当我从 iOS 按下按钮时,我创建了一个函数来访问 APi 并发布值。
我尝试使用 PostMan 输入一次值来测试 API,但出现错误。 页面因不活动而过期。
我理解这个错误是因为POST没有包含csrf_token
。
如果在iOS上使用csrf_token认证,认证方式是什么?另外,还有其他的认证方式吗?
快捷键功能
@IBAction func bookmarkBtn(_ sender: Any) {
let user_id = defaultValues.string(forKey: "id")
let urlString = "http://127.0.0.1:8000/store/favorite"
let request = NSMutableURLRequest(url: URL(string: urlString)!)
request.httpMethod = "POST"
request.addValue("application/json", forHTTPHeaderField: "Content-Type")
let params:[String:Any] = [
"user_id": user_id,
"store_id" : store_id,
]
do{
request.httpBody = try JSONSerialization.data(withJSONObject: params, options: .prettyPrinted)
let task:URLSessionDataTask = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {(data,response,error) -> Void in
let resultData = String(data: data!, encoding: .utf8)!
print("result:\(resultData)")
print("response:\(response)")
})
task.resume()
}catch{
print("Error:\(error)")
return
}
Laravel FavoriteController
public function favorite(Request $request){
Favorite::create(
array(
'user_id' => $request->user_id,
'store_id' => $request->store_id,
)
);
return ['Status' => 'Success'];
}
Laravel 路由/web.php
Route::post('/store/favorite', 'FavoriteController@favorite');
最佳答案
从 CSRF 保护中排除 URI 有时您可能希望将一组 URI 排除在 CSRF 保护之外。例如,如果您使用 Stripe 处理付款并使用他们的 webhook 系统,您需要将 Stripe webhook 处理程序路由排除在 CSRF 保护之外,因为 Stripe 不知道要向您的路由发送什么 CSRF token 。
通常,您应该将这些类型的路由放置在 RouteServiceProvider 应用于 routes/web.php 文件中所有路由的 web 中间件组之外。但是,您也可以通过将路由的 URI 添加到 VerifyCsrfToken 中间件的 $except 属性来排除路由:
<?php
namespace App\Http\Middleware;
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
class VerifyCsrfToken extends Middleware
{
/**
* The URIs that should be excluded from CSRF verification.
*
* @var array
*/
protected $except = [
'stripe/*',
'http://example.com/foo/bar',
'http://example.com/foo/*',
];
}
注意:Apis 应该是无状态的。最好使用 jwt 进行身份验证,并且 csrf token 仅用于 web 界面而不用于 api
引用:https://laravel.com/docs/5.6/csrf#csrf-excluding-uris
如果你使用的是最新版本的 laravel 那么你有 api.php 而不是 web.php 的 api
如果你仍然想使用 web.php 那么你可以在 VerifyCsrfToken 中排除 csrf token
protected $except = [
'/*',
];
我建议你在 routes/api.php
中添加你的路由,这样你就不会遇到 csrf token 问题。另外你需要在你的 url 中添加 api
http://localhost:8080/api/yourroutename
关于ios - 如何使用身份验证方法快速访问 Laravel API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52198097/