2017年更新!
我在发布原始问题时遇到的问题与Facebook最近在强迫每个人使用其API版本2.3时所做的更改无关.有关该特定问题的解决方案,请参阅下面的sammy34的答案./ oauth/access_token端点的2.3版现在返回JSON而不是表单编码的值
由于历史原因,这是我原来的问题/问题:
我有一个MVC5 Web应用程序,它使用内置支持通过Facebook和Google进行身份验证.几个月前我们构建这个应用程序时,我们遵循了这个教程:http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and -google-oauth2-and-openid-sign-on,一切都很棒.
现在,突然之间,Facebook身份验证刚刚停止工作.Google身份验证仍然有效.
问题描述:我们点击链接使用Facebook连接,我们被重定向到Facebook,如果我们不允许我们的Facebook应用访问我们的个人资料,我们会被提示.当我们点击"确定"时,我们会被重定向回我们的网站,但我们只是登录屏幕而不是登录.
我已经在调试模式下完成了这个过程,并且根据上面提到的教程,我在我的帐户控制器中有了这个ActionResult:
// GET: /Account/ExternalLoginCallback
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
............
Run Code Online (Sandbox Code Playgroud)
当单步执行代码并从Facebook返回时,loginInfo对象始终为NULL,这会导致用户重定向回登录.
为了理解幕后实际发生的事情,我安装了Fiddler并监控HTTP流量.我发现的是,在Facebook权限对话框中单击"确定"后,Facebook会使用以下URL重定向回我们的应用程序:
https://localhost/signin-facebook?code=<access-token>
Run Code Online (Sandbox Code Playgroud)
这个URL不是一个实际的文件,可能是由我猜测的这个OWIN框架内置的一些控制器/处理程序处理的.最有可能的是,它使用给定的代码连接回Facebook,以查询有关尝试登录的用户的信息.现在,问题是我们被重定向到:而不是这样做:
/Account/ExternalLoginCallback?error=access_denied
Run Code Online (Sandbox Code Playgroud)
我确信这是Facebook正在做的事情,也就是说,它不是向我们提供用户数据,而是通过此错误消息重定向我们.
这会导致AuthenticationManager.GetExternalLoginInfoAsync();失败并始终返回NULL.
我完全没有想法.据我们所知,我们没有改变任何事情.
我已经尝试创建一个新的Facebook应用程序,我已经尝试过再次使用该教程,但我总是遇到同样的问题.
欢迎任何想法!
更新!
好的,这让我疯了!我现在已经手动完成了执行身份验证所需的步骤,当我这样做时,一切都很顺利.为什么在使用MVC5 Owin的东西时这不起作用?
这就是我做的:
// Step 1 - Pasted this into a browser, this returns a code
https://www.facebook.com/dialog/oauth?response_type=code&client_id=619359858118523&redirect_uri=https%3A%2F%2Flocalhost%2Fsignin-facebook&scope=&state=u9R1m4iRI6Td4yACEgO99ETQw9NAos06bZWilJxJrXRn1rh4KEQhfuEVAq52UPnUif-lEHgayyWrsrdlW6t3ghLD8iFGX5S2iUBHotyTqCCQ9lx2Nl091pHPIw1N0JV23sc4wYfOs2YU5smyw9MGhcEuinvTAEql2QhBowR62FfU6PY4lA6m8pD3odI5MwBYOMor3eMLu2qnpEk0GekbtTVWgQnKnH6t1UcC6KcNXYY
I was redirected back to localhost (which I had shut …Run Code Online (Sandbox Code Playgroud) 我有一个Python/Django应用程序,它运行了很多SQL语句.出于调试目的,我想我应该为我创建一个简单的视图,它只列出已经运行的所有SQL语句.
根据文档,这段代码应该足以做到这一点:
from django.db import connection
connection.queries
Run Code Online (Sandbox Code Playgroud)
只要DEBUG是真的.
但是,这并没有给我任何东西.DEBUG肯定设置为True.在什么情况下这个connection.queries存储?我的意思是,我应该能够执行一个执行大量SQL语句的页面,然后切换到我创建的http:// myserver/sql视图,看看那些SQL语句,对吗?当然使用相同的浏览器会话...
我确实检查了db.reset_queries()是否在代码中的任何地方运行,看起来不是.
任何想法为什么connection.queries总是空的?
我们有一个用.NET C#编写的CMS系统.该系统具有模板(基本上是HTML文件)和各种其他支持文件(如CSS和javascript文件)的编辑工具.
这些"文件"不是真正的文件,而是数据库记录,它们使用CMS系统中的普通旧textareas进行编辑.
为了使编辑这些"文件"更容易,一个想法是在CMS系统中为这些文件实现WebDAV支持,因此用户可以使用一些WebDAV客户端软件连接到CMS,然后在VS 2008中打开它们.
首先,这是一个可行的想法吗?
其次,如果是这样......从哪里开始?有关在C#中实现WebDAV服务器以提供对物理文档或"伪"文档的访问的任何好文章,这些文档实际上只是数据库中的记录吗?
任何输入赞赏....
我正在尝试根据其type属性设置OL的样式.所有UL和OL的列表样式属性之前已经被另一个我无法修改的CSS样式表消灭了,我需要重新设置列表样式,将类型考虑在内,即如果OL应该使用Roman人物或字母数字等
我觉得这很容易; 我将使用属性选择器根据type属性的值来定位OL.属性选择器区分大小写,所以这应该很简单,对吧?
错误 - 至少在您尝试使用标准"类型"属性时.
这是一个例子(有效):
/* Remove default list style */
ul, ol { list-style:none; }
/* This works, using a non-standard foo attribute. The selector is case sensitive, so I can target 'i' and 'I' separately */
ol[foo='i'] {
list-style-type:lower-roman;
}
ol[foo='I'] {
list-style-type:upper-roman;
}Run Code Online (Sandbox Code Playgroud)
<ol foo="i">
<li>Styled with lower case roman</li>
<li>Styled with lower case roman</li>
</ol>
<ol foo="I">
<li>Styled with uppercase roman</li>
<li>Styled with uppercase roman</li>
</ol>Run Code Online (Sandbox Code Playgroud)
现在,替换foo用type,然后再试一次:
/* Remove default …Run Code Online (Sandbox Code Playgroud)我们有一个相当大的基于Web的解决方案,运行在.Net 4.5上.最近,当我们检查性能问题时,系统似乎只在任何给定时间(每个客户端)提供一个请求,我们了解到原因是会话状态.通过将EnableSessionState属性更改为ReadOnly,可以同时提供多个请求,并显着提高性能.
我们认为可能会遇到各种各样的问题,因为我们依赖会话状态来处理系统中的许多事情,但到目前为止我们根本没有任何负面的副作用.登录按预期工作,我们在会话状态中存储的所有内容似乎也正常工作.
这引出了一个问题......为什么这不是默认行为?我们刚刚没有经历过这种明显的不良副作用吗?
我注意到在System.Web.UI.WebControls命名空间中的大多数(如果不是全部)标准Web控件上,您可以添加所需的任何属性而不会使页面崩溃.
以asp:Button控件为例.
此代码完全有效:
<form runat="server">
<asp:Button runat="server" Text="Test button" crapAttribute="crapValue" />
</form>
Run Code Online (Sandbox Code Playgroud)
现在,我有一个自定义服务器控件,如果我添加任意属性,它会崩溃.它只接受定义了相应公共属性的属性.
我得到的错误是这样的"控件没有名为"crapAttribute"的公共属性.
我希望我的自定义控件接受任何属性而不会崩溃.我需要做些什么才能工作?
我看过Reflector中的标准控件,它们确实有各种各样的属性和东西,但是我看到的东西没有立即引起我的注意.
我的自定义控件继承自WebControl的价值.
我刚刚将我的解决方案更新到.NET7。我在 Azure Devops 上有一个构建/发布管道设置,现在在“恢复”步骤中失败。
这是第一个错误,然后是多个相同类型的其他错误:
2:3> 项目“D:\a”中的文件“C:\Program Files\dotnet\sdk\6.0.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets”中的目标“_CheckForUnsupportedNETCoreVersion” \1\s\xxxx\xxxx.csproj”(目标“CollectPackageReferences”取决于它):使用程序集“C:\Program Files\dotnet\sdk\6.0.402\Sdks\Microsoft.NET.Sdk 中的“NETSdkError”任务\targets..\tools\net6.0\Microsoft.NET.Build.Tasks.dll”。任务“NETSdkError”2:3>C:\Program Files\dotnet\sdk\6.0.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.TargetFrameworkInference.targets(144,5):错误NETSDK1045:当前.NET SDK 不支持面向 .NET 7.0。目标为 .NET 6.0 或更低版本,或者使用支持 .NET 7.0 的 .NET SDK 版本。[D:\a\1\s\xxxx\xxxx.csproj] 完成执行任务“NETSdkError”——失败。
我尝试在“代理规范”下使用“Windows最新”和“Windows 2022”,但都不起作用。我以为“Windows最新版”发布后会自动更新到最新的SDK吗?我需要更改什么才能使此构建管道与 .NET7 兼容?
我使用 HotChocolate 进行了 GraphQL 突变,并使用[Authorize]from 属性HotChocolate.AspNetCore.Authorization在我的 GraphQL 端点上强制执行授权。
这工作正常,我只能在以管理员身份登录后调用突变......
...但现在我想检索已授权的用户,但我似乎找不到办法做到这一点。
[ExtendObjectType(Name = "Mutation")]
[Authorize(Roles = new[] { "Administrators" })]
public class MyMutations
{
public bool SomeMethod()
{
// In a regular Web API controller, you can do User.Identity.Name to fetch the user name of the current user. What is the equivalent in Hot Chocolate?
var userName = "";
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
.net ×2
.net-7.0 ×1
.net-core ×1
asp.net ×1
c# ×1
connection ×1
css ×1
django ×1
facebook ×1
graphql ×1
hotchocolate ×1
html ×1
html-lists ×1
owin ×1
properties ×1
webdav ×1