Ответы пользователя по тегу Vue.js
  • Как скачать файл на vuejs?

    C пакетом maatwebsite/excel не работал, но есть пример с phpexcel

    let requestParams = {
        method: 'get',
        url: 'some-url',
        responseType: 'blob',
    };
    
    axios.request(requestParams)
        .then({data} => {
            let filename = '123' + (Math.floor(Date.now() / 1000)) + '.xlsx';
            let url = window.URL.createObjectURL(new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }));
            let link = document.createElement('a');
            link.href = url;
            link.setAttribute('download', filename);
            document.body.appendChild(link);
            link.click();
            link.remove();
        });


    На backend
    $oSpreadsheet = new Spreadsheet();
    
    // TODO что-то делаем с $oSpreadsheet заполняем данными 
    
    $oWriter = IOFactory::createWriter($oSpreadsheet, 'Xlsx');
    $sFilename = '123.xlsx';
    
    header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
    header('Content-Disposition: attachment;filename="' . $sFilename . '"');
    header('Cache-Control: max-age=0');
    
    $oWriter->save('php://output');
    exit;
    Ответ написан
    3 комментария
  • Как можно защитить свой АПИ в SPA или SSR приложение?

    Для yii2 есть штатный механизм токенов - bearer token

    В своем проекте я создал BaseController наследуемый от ActiveController и в нем метод

    public function behaviors()
    	{
    		$arBehaviors = parent::behaviors();
    
    		$arBehaviors['authenticator'] = [
    			'class' => HttpBearerAuth::class,
    		];
    
    		$arBehaviors['contentNegotiator'] = [
    			'class' => ContentNegotiator::class,
    			'formats' => [
    				'application/json' => Response::FORMAT_JSON,
    			],
    		];
    
    		return $arBehaviors;
    	}


    Во vue отправляется ajax запрос на back с логином/паролем. На back'е примерно такой action
    public function actionLogin()
    	{
    		$model = new LoginForm();
    
    		if ($model->load(Yii::$app->getRequest()->getBodyParams(), '') && $model->login()) {
    			$oUser = User::findOne(Yii::$app->user->id);
    			$oUser->generateAuthKey();
    			$oUser->save();
    
    			$userData = $oUser->toArray();
    			unset($userData['password_hash']);
    			unset($userData['password_reset_token']);
    			return ['access_token' => $oUser->getAuthKey(), 'user' => $userData];
    		}
    		else {
    			$model->validate();
    			return $model;
    		}
    	}
    Ответ написан
    3 комментария