0

我正在运行 dredit 示例,第一次启动应用程序时,sql 表为空,应用程序插入了一个值,一切正常,但我截断了表,现在“refresh_token”为空,应用程序崩溃。为什么现在为空?是不是和第一次跑的情况一样?为什么截断使身份验证崩溃?

[2012 年 5 月 15 日 22:56:59] 验证和授权用户时出错:获取 OAuth2 访问令牌时出错,消息:'invalid_grant'

[2012 年 5 月 15 日 22:57:00] 从数据库检索用户或更新刷新令牌时出错:SQLSTATE[23000]:违反完整性约束:1048 列“刷新令牌”不能为空

[2012 年 5 月 15 日 22:57:00] PHP 致命错误:未捕获的异常 'PDOException' 带有消息'SQLSTATE [23000]:完整性约束违规:1048 列 'refresh_token' 不能为 null' 在 /var/www/drivecrypt/ www/auth_handler.php:214

堆栈跟踪:

#0 /var/www/drivecrypt/www/auth_handler.php(214): PDOStatement->execute()

#1 /var/www/drivecrypt/www/auth_handler.php(244): AuthHandler->CreateUserInDb(Object(Userinfo), NULL)

#2 /var/www/drivecrypt/www/auth_handler.php(293): AuthHandler->GetUser(Object(Userinfo), NULL)

#3 /var/www/drivecrypt/www/index.php(48): AuthHandler->VerifyAuth() #4 {main}

在第 214 行抛出 /var/www/drivecrypt/www/auth_handler.php

4

1 回答 1

0

您应该在 AuthHandler->GetUserFromDb 中捕获异常并将 null 返回给 AuthHandler->GetUser。但是,这样做会在会话中创建一个带有空刷新令牌的新用户条目,并且后续请求将失败并返回 401。

要解决此问题,您需要确保在访问https://code.google.com/p/google-drive-sdk-samples/source/browse/php/auth_handler时未设置 $_SESSION['credentials'] .php#335,以便用户将被重定向到 OAuth 授权页面并再次授予访问权限以请求新的刷新令牌。

于 2012-05-22T13:51:36.970 回答