Как вы обрабатываете аутентификацию на основе токенов на предъявителя при запросе изображения в формате html? - PullRequest
1 голос
/ 17 марта 2019

Я хочу, чтобы изображения в формате html загружались только для аутентифицированных пользователей.Так, например, я написал следующий код:

[на стороне клиента]

<img src="/image/showWorkImg?fileName=ed296da987c8ab75c42dce07e.jpg" alt="undefined" style="float:left;height: auto;width: auto"/>

[ImageController]

class ImageController extends Controller
{
    public function showWorkImg(Request $request)
    {
        try {
            $fileFullName = config('app.image_path') . '/' . $request->fileName;

            return \Image::make($fileFullName)->response();

        } catch (\Exception $e) {
            return "";
        }

    }
}

И, безусловно, процесс аутентификациинаходится на промежуточном программном обеспечении между клиентской стороной и ImageController.Однако, как вы знаете, HTML-тег image не может отправить запрос с токенами на основе заголовка.Отправляет запрос только с куки.Поэтому я решил синхронизировать токен авторизации заголовка с токеном авторизации cookie следующим образом.

[на стороне клиента]


localStorage.setItem(keyName, response.data.token);
cookies.set(keyName, response.data.token, {path: '/'});

enter image description here

Интересно, нет ли проблем с такой стратегией.

Ответы [ 2 ]

0 голосов
/ 17 марта 2019

есть несколько уровней безопасности, которые следует учитывать здесь: -

-В Frontend вы должны авторизовать отправку запросов (например, используя событие JS onClick): -

<img src="yourimage.jpg" onclick="check authorization">

-В Backend asНаилучшая практика аутентификации - вы можете использовать Паспорт , а в ваших маршрутах API инкапсулировать ваши аутентифицированные маршруты в промежуточное ПО аутентификации, например: -

Route::group(['middleware' => 'auth:api'], function () {
     Route::get('getImage', 'ImageController@showWorkImg');
  });

- И, конечно, вы можете извлечь свой токен (илиубедитесь, что он существует) в методе контроллера: -

public function showWorkImg(Request $request)
{
   if(isset($request->bearerToken())){
         ...your code
   }
   else{
         return response()->json(["message" => "Unauthenticated"],Response::HTTP_FORBIDDEN);
   }
}
0 голосов
/ 17 марта 2019

Можно добавить конечную точку GET /image/show-work-image/{fileName}.Эта конечная точка вернет изображение, если fileName найден и пользователь аутентифицирован.

Вы можете получить изображение с помощью ajax и отобразить его на странице.Для получения дополнительной информации см. Img src путь с параметрами заголовка для передачи

...