如何阻止CognitoIdentityProviderException在AWS PHP sdk中返回500状态代码

时间:2018-05-09 00:47:38

标签: php laravel amazon-web-services aws-sdk

我正在开发一个Web应用程序。在我的应用程序中,我需要将用户登录到AWS cognito系统。我可以成功登录系统。但唯一的问题是当用户提供的用户名和密码无效时,我的Laravel框架会杀死返回500内部服务器状态代码的应用程序。但是当用户名和密码无效时,我想做其他事情。我尝试使用try catch块,但它没有覆盖错误。请看下面的代码。

try{

                $client = new CognitoIdentityProviderClient([
                    'version' => 'latest',
                    'region' => env('AWS_REGION', '')
                    'credentials' => [
                        'key'    => env('AWS_IAM_KEY', ''),
                        'secret' => env('AWS_IAM_SECRET', '')
                    ]
                ]);

                $result = $client->adminInitiateAuth([
                    'AuthFlow' => 'ADMIN_NO_SRP_AUTH',
                    'ClientId' => COGNITO_APP_CLIENT_ID,
                    'UserPoolId' => COGNITO_USER_POOL_ID,
                    'AuthParameters' => [
                    'USERNAME' => $request->email,
                    'PASSWORD' => $request->password,
                ],
                ]);
                //Error thrown here if the  username and password are not valid.
                //continue

            }
            catch(Exception $e)
            {
                //I want to do something here if the error is thrown because of the invalid credentials without killing the app by throwing 500 status code.
            }

如上所述,如果用户凭据无效,SDK会抛出错误。它将通过返回500状态代码来终止应用程序。我不想止步于此。所以,我使用try catch块来捕获错误并继续在代码中。但是try catch块也没有捕获错误。

这是截图。 enter image description here

那么,如何阻止AWS sdk停止应用程序抛出500状态代码?

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案。 Laravel使用命名空间。所以,我不需要在try catch块中只使用Exception,而是需要放置" \"作为前缀。所以try catch变成这样。

var optionsArr = [];
var questionID;
$(document).on('click', '.js-answer-check', function(e){
    if ($(this).is(':checked')){
        questionID = $(this).data('question');
        var optionID = $(this).data('id');
        optionsArr.push(optionID);
    } else {
        var removeItem = $(this).data('id');
        optionsArr = $.grep(optionsArr, function(value){
            return value != removeItem;
        });
    }
});