我正在尝试创建自己的IDataStore实现,以便与Google身份验证配合使用。
我创建了DatabaseDataStore(类似于sample中的一个),它实现了IDataStore。在我的Web应用程序中,我有一个注册用户页面,我要求用户单击注册按钮,他将被重定向到Google身份验证。这是代码。
var result = await new AuthorizationCodeMvcApp(this, new AppFlowMetadata()). AuthorizeAsync(cancellationToken);
这是AppFlowMetadata:
private static readonly IAuthorizationCodeFlow flow =
new CustomAuthorizationCodeFlow(new GoogleAuthorizationCodeFlow.Initializer
{
ClientSecrets = new ClientSecrets { ClientId = “my client id”, ClientSecret = “my client secrets” },
Scopes = new[] { DriveService.Scope.Drive },
DataStore = new DatabaseDataStore(“LocalDB”,””,””,””,””)
});
我将空值传递给idatastore,因为我已经硬编码了连接字符串。成功完成Oauth Flow后,我可以在GoogleUser Table中看到数据保存在我的数据库中。 google usertable会在refreshtoken字段中自动保存此信息以及用户ID。
{“的access_token”:” XXXXXX”,” token_type”:”承载”,” expires_in”:3600,” refresh_token”:” XXXXXX”,”分”:” 2015-04-08T18:17:01.233 + 05 :30“}
现在下一步是我想让用户转到应用程序中的另一个页面,在那里他将选择要上传的文件。然后他应该能够上传已经过身份验证的文件。我在这里做了类似的事。
private static readonly IAuthorizationCodeFlow flow =
new CustomAuthorizationCodeFlowSaved(new GoogleAuthorizationCodeFlow.Initializer { ClientSecrets = new ClientSecrets { ClientId = “My client id”,ClientSecret = “my client Secret” },
Scopes = new[] { DriveService.Scope.Drive },
DataStore = new DatabaseDataStore(getStream())
} );
private static StoredResponse getStream()
{
DataAccess objDA = new DataAccess();
DataRow dr = objDA.getSingleDataRow(“Select RefreshToken from dbo.GoogleUser where userid=1 and username=’user Name'”);
StoredResponse myStoredResponse = new StoredResponse(dr[“RefreshToken”].ToString());
return myStoredResponse;
}
我已经为StoredResponse创建了类,如下所示。 (我刚刚将文章转介给savedDatastore。)
public class StoredResponse
{
public string access_token { get; set; }
public string token_type { get; set; }
public long? expires_in { get; set; }
public string refresh_token { get; set; }
public string Issued { get; set; }
public StoredResponse(string pRefreshToken)
{
//this.access_token = pAccessToken;
// this.token_type = pTokenType;
//this.expires_in = pExpiresIn;
this.refresh_token = pRefreshToken;
//this.Issued = pIssued;
this.Issued = DateTime.MinValue.ToString();
}
public StoredResponse()
{
this.Issued = DateTime.MinValue.ToString();
}
}
这不会提示登录,但凭据为空。
你能帮我解决这个问题吗?最终我想将令牌存储到数据库中,并在一段时间后在另一个页面上使用它们。但不是一次会议。