小编Sna*_*low的帖子

使用 Laravel 和 Socialite 刷新访问令牌

我正在处理的应用程序具有邮寄功能。当我在登录后一个多小时尝试发送邮件时,我遇到了错误。访问令牌已过期,迫使您重新登录。

但是如何刷新访问令牌?我知道我首先必须检查令牌是否已过期,然后使用刷新令牌发送请求,最后保存返回的访问令牌。

我现在已经创建了一个中间件并将其应用于 web.php 中的路由,如下所示:

Route::get('create', 'EmployeeController@create')
                ->middleware('refresh');
Run Code Online (Sandbox Code Playgroud)

然后在中间件中我有以下代码:

public function handle($request, Closure $next)
{
    dump(session('user'));
    $client = new Google_Client();
    $client->setAccessToken(['access_token' => session('user')->token, 'expires_in' => session('user')->expiresIn]);
    $_SESSION['token'] = $client->getAccessToken();
    $client->setAccessToken($_SESSION['token']);
    if( $client->isAccessTokenExpired() ) {
      echo "expired";
    }
    else {
      echo "not expired";
    }
    return $next($request);
}
Run Code Online (Sandbox Code Playgroud)

我知道这甚至没有做任何接近我想要的事情。但是当我登录时,它似乎总是回显“过期”,即使我刚刚登录。我想那是因为我没有指定到期日期,但我不知道如何设置一个看起来像社交名流的人只支持这些基本的职能:

$token = $user->token;
$refreshToken = $user->refreshToken; // not always provided
$expiresIn = $user->expiresIn;
Run Code Online (Sandbox Code Playgroud)

我能找到的最接近我的问题的问题是:如何使用 Laravel 管理 OAuth 刷新令牌? 这告诉我添加离线访问权限,如下所示:

return Socialite::driver('google')->scopes([ 'email', 'profile', 'https://www.googleapis.com/auth/gmail.compose' ])
            ->with(["access_type" => "offline", "prompt" => "consent select_account"]) …
Run Code Online (Sandbox Code Playgroud)

php access-token laravel laravel-socialite

6
推荐指数
0
解决办法
2133
查看次数

Laravel echo:是否可以监听所有事件而不是特定事件?

我已经在我的项目中实现了 Laravel 广播。一切正常,但我想知道是否可以收听所有事件而不仅仅是特定事件?

目前我的前端有这个代码:

window.Echo.channel('office-dashboard')
  .listen('CompanyUpdated', (e) => {
    console.log(e.company);
  });
  .listen('CompanyDeleted', (e) => {
    console.log(e.company);
  });
Run Code Online (Sandbox Code Playgroud)

我想以这样的方式组织我的事件,以便我可以抓住它到底是什么类型的事件,以及执行了什么样的动作。但是,如果我仍然必须像现在一样专门收听每个事件,那将毫无用处。我想收听频道中的所有事件,这可能吗?

我阅读了docs,但那些只谈论如何收听特定事件。

javascript laravel-echo

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

使 Django REST API 接受一个列表

我正在开发一个功能,我需要能够将包含属性的列表发布到 API。一个属性有一个name,valueunit。现在我有两个问题:

  1. 我的列表究竟应该如何寻找 API 以从一开始就接受它作为正确的列表?我应该将列表解析为对象吗?或者一个简单的列表可以吗?
  2. 我正在使用 Django REST 框架,并且我已经使用教程制作了 API (完美运行)。但是如何让 Django 接受多个对象/一个列表?我已经读过它就像添加many = True到您实例化序列化程序的位置一样简单,我在这里做的:

(出于某种原因,除非我在这里放文本,否则代码不会格式化)

class PropertyViewSet(viewsets.ModelViewSet):  
    queryset = Property.objects.all()  
    serializer_class = PropertySerializer
Run Code Online (Sandbox Code Playgroud)

所以我尝试这样做serializer = PropertySerializer(queryset, many=True),这打破了 API 视图。所以我想我必须创建一个新的序列化程序并为此查看(我是对的)?但是我如何确保我的 API 知道在正确的时间使用哪个?

如果有人能澄清这一点,那就太好了,谢谢。

python django

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

Django url 模式,从根重定向到其他 url

对于你们来说,这应该是一个很容易解决的问题:我刚刚开始使用 Django,并且正在做一些路由。这是我urls.py在项目的根目录中:

urlpatterns = [
  path('admin/', admin.site.urls),
  path('', include('dashboard.urls')),
]
Run Code Online (Sandbox Code Playgroud)

这是我的路由dashboard app

urlpatterns = [
    path('dashboard', views.index, name='index'),
    path('', views.index, name='index'),
]
Run Code Online (Sandbox Code Playgroud)

现在假设我希望我的用户/dashboard在访问网站的根目录时被重定向到。所以我会使用''作为根中的路由urls.py,然后让每个人都/dashboardurls.py中发送到dashboard app。但是当我这样做时,我收到以下警告:

?: (urls.W002) Your URL pattern '/dashboard' [name='index'] has a route beginning with a '/'. Remove this slash as it is unnecessary. If this pattern is targeted in an include(), ensure the include() pattern has a trailing '/'.
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用'/'代替 …

python django

2
推荐指数
1
解决办法
5691
查看次数

获取字符串python的最后一个斜杠

我有一个字符串,我在空格列表中拆分它,列表中的一项是例如: "/home/hoeter/PycharmProjects/Renpy/window.py"

我想要的最终结果是让它像这样出来:

window.py="/home/hoeter/PycharmProjects/Renpy/window.py"
Run Code Online (Sandbox Code Playgroud)

在 Javascript 中,我会做类似的事情:

var string = "/home/hoeter/PycharmProjects/Renpy/window.py";
for (var i = string.length; i>1; i--)
{
    if(string.charAt(i) === "/")
    {
        temp = string.substring(i+1, string.length);
        string = temp + "=" + '"' + string + '"';
        console.log(string);
        i = 0;
    }
}
>>> window.py="/home/hoeter/PycharmProjects/Renpy/window.py"
Run Code Online (Sandbox Code Playgroud)

但是 for 循环在 Python 中不能以这种方式工作,我已经看到了一些 for 循环,enemurate但我不明白如何用我想要的方式实现它。最后我想遍历整个列表for split in splits并将结果连接成一个字符串

python

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