Как использовать метод аутентификации для доступа к Laravel API с помощью swift? - PullRequest
0 голосов
/ 06 сентября 2018

Я разрабатываю приложение для iOS Я сам сделал POST API. Теперь, когда я нажимаю кнопку из iOS, я создаю функцию для доступа к APi и публикации значения. Я попытался ввести значение для проверки API один раз с PostMan, но я получил ошибку. The page has expired due to inactivity.

Я понимаю, что эта ошибка связана с тем, что POST не включает csrf_token.

Если вы используете csrf_token для iOS для аутентификации, каков способ аутентификации? Кроме того, есть ли другие способы аутентификации?

Функция Swift Button

@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');

1 Ответ

0 голосов
/ 06 сентября 2018

Исключая URI из защиты CSRF Иногда вы можете захотеть исключить набор URI из защиты CSRF. Например, если вы используете Stripe для обработки платежей и используете их систему webhook, вам нужно будет исключить маршрут обработчика веб-крюков Stripe из защиты CSRF, поскольку Stripe не будет знать, какой токен CSRF отправлять на ваши маршруты.

Как правило, такие типы маршрутов следует размещать вне группы веб-промежуточного программного обеспечения, которую RouteServiceProvider применяет ко всем маршрутам в файле route / web.php. Однако вы также можете исключить маршруты, добавив их URI к свойству $ кроме промежуточного программного обеспечения VerifyCsrfToken:

<?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 только для веб-интерфейса, а не для apis

Ref: https://laravel.com/docs/5.6/csrf#csrf-excluding-uris

если вы используете последнюю версию laravel, у вас есть api.php вместо web.php для apis

если вы все еще хотите использовать web.php, вы можете исключить токен csrf в VerifyCsrfToken

  protected $except = [
            '/*',

        ];

Я рекомендую вам добавить ваши маршруты в routes/api.php, чтобы вы не получили проблему с токеном csrf. Также вам нужно добавить api в ваши URL

http://localhost:8080/api/yourroutename
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...