小编Hau*_*Haf的帖子

ASP.NET MVC5 OWIN Facebook身份验证突然无法正常工作

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)

facebook owin asp.net-mvc-5

66
推荐指数
3
解决办法
2万
查看次数

使用django.db.connection.queries

我有一个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总是空的?

django connection django-queryset

10
推荐指数
2
解决办法
2万
查看次数

在C#中实现WebDAV服务器?

我们有一个用.NET C#编写的CMS系统.该系统具有模板(基本上是HTML文件)和各种其他支持文件(如CSS和javascript文件)的编辑工具.

这些"文件"不是真正的文件,而是数据库记录,它们使用CMS系统中的普通旧textareas进行编辑.

为了使编辑这些"文件"更容易,一个想法是在CMS系统中为这些文件实现WebDAV支持,因此用户可以使用一些WebDAV客户端软件连接到CMS,然后在VS 2008中打开它们.

首先,这是一个可行的想法吗?

其次,如果是这样......从哪里开始?有关在C#中实现WebDAV服务器以提供对物理文档或"伪"文档的访问的任何好文章,这些文档实际上只是数据库中的记录吗?

任何输入赞赏....

.net c# webdav content-management-system

10
推荐指数
1
解决办法
1万
查看次数

CSS属性选择器和区分大小写,具有"type"属性与make-up属性

我正在尝试根据其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)

现在,替换footype,然后再试一次:

html css case-sensitive css-selectors html-lists

7
推荐指数
1
解决办法
135
查看次数

EnableSessionState = ReadOnly - 可能的副作用?

我们有一个相当大的基于Web的解决方案,运行在.Net 4.5上.最近,当我们检查性能问题时,系统似乎只在任何给定时间(每个客户端)提供一个请求,我们了解到原因是会话状态.通过将EnableSessionState属性更改为ReadOnly,可以同时提供多个请求,并显着提高性能.

我们认为可能会遇到各种各样的问题,因为我们依赖会话状态来处理系统中的许多事情,但到目前为止我们根本没有任何负面的副作用.登录按预期工作,我们在会话状态中存储的所有内容似乎也正常工作.

这引出了一个问题......为什么这不是默认行为?我们刚刚没有经历过这种明显的不良副作用吗?

.net session-state

6
推荐指数
1
解决办法
951
查看次数

允许服务器/用户控件上的任何属性/属性

我注意到在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的价值.

asp.net user-controls properties servercontrol

5
推荐指数
1
解决办法
283
查看次数

更新到 .NET7 后无法在 Azure Devops 上构建

我刚刚将我的解决方案更新到.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 兼容?

azure-pipelines .net-7.0

5
推荐指数
2
解决办法
5216
查看次数

HotChocolate带有Authorize属性,如何获取当前登录的用户?

我使用 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-core graphql hotchocolate

3
推荐指数
1
解决办法
4467
查看次数