أهلا!
أنا أقوم بتنفيذ خدمة Oauth2 وأريد تسجيل الدخول إلى Zammad باستخدامها.
كل شيء يعمل بشكل جيد ولكن في الخطوة التي يحصل فيها Zammad على رمز الوصول ويجب أن يقوم بتسجيل الدخول للمستخدم ، أحصل على الخطأ التالي في السجلات:
ERROR -- : Attribute 'login' required!
E, [2017-03-07T10:02:19.751951 #4144] ERROR -- : ["/opt/zammad/app/models/user.rb:833:in `check_login'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:432:in `block in make_lambda'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:164:in `block in halting'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `block in call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `each'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_validation_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations/callbacks.rb:113:in `run_validations!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations.rb:338:in `valid?'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:58:in `valid?'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:83:in `perform_validations'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:37:in `save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/attribute_methods/dirty.rb:21:in `save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:286:in `block (2 levels) in save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:220:in `transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:348:in `with_transaction_returning_status'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:286:in `block in save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:301:in `rollback_active_record_state!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:285:in `save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/persistence.rb:34:in `create'", "/opt/zammad/app/models/user.rb:291:in `create_from_hash!'", "/opt/zammad/app/models/authorization.rb:57:in `create_from_hash'", "/opt/zammad/app/controllers/sessions_controller.rb:145:in `create_omniauth'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/implicit_render.rb:4:in `send_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/base.rb:198:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rendering.rb:10:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:117:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:81:in `run_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/callbacks.rb:19:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rescue.rb:29:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `block in instrument'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `instrument'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/base.rb:137:in `process'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionview-4.2.7.1/lib/action_view/rendering.rb:30:in `process'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal.rb:196:in `dispatch'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal.rb:237:in `block in action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:74:in `dispatch'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:43:in `serve'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:43:in `block in serve'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:30:in `each'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:30:in `serve'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:817:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:408:in `call_app!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:362:in `callback_phase'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-oauth2-1.4.0/lib/omniauth/strategies/oauth2.rb:75:in `callback_phase'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:227:in `callback_call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:184:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/builder.rb:63:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/etag.rb:24:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/conditionalget.rb:25:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/head.rb:13:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/params_parser.rb:27:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/flash.rb:260:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/session/abstract/id.rb:225:in `context'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/session/abstract/id.rb:220:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/cookies.rb:560:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/query_cache.rb:36:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:88:in `__run_callbacks__'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_call_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:81:in `run_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/callbacks.rb:27:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/remote_ip.rb:78:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:38:in `call_app'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:20:in `block in call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/tagged_logging.rb:68:in `block in tagged'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/tagged_logging.rb:26:in `tagged'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/tagged_logging.rb:68:in `tagged'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:20:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/request_id.rb:21:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/runtime.rb:18:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/static.rb:120:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/sendfile.rb:113:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/engine.rb:518:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/application.rb:165:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/content_length.rb:15:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/configuration.rb:225:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/server.rb:578:in `handle_request'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/server.rb:415:in `process_client'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/server.rb:275:in `block in run'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/thread_pool.rb:116:in `block in spawn_thread'"]
لا أجد أي وثائق حول كيفية جلب zammad لبيانات اعتماد المستخدم عبر Oauth2؟
في أي من وثائق Oauth2 ، يجب أن تحتوي الاستجابة لطلب الرمز المميز فقط على access_token وقيم انتهاء الصلاحية.
هل يمكن أن تعطيني تلميحًا من فضلك؟
أطيب التحيات من النمسا!
Zammad لا يدعم طريقة تسجيل الدخول إلى Access Token. نحتاج إلى بيانات اعتماد المستخدم في حمولة الاستجابة.
مأخوذة من تذكرة (# 102057):
يعمل مقدمو الخدمات الآخرون على النحو التالي:
تم تكوين Zammad لموفر المصادقة (مثل Github). بعد ذلك تظهر الأيقونة في شاشة تسجيل الدخول. بعد النقر على الرمز / الرابط ، تتم إعادة توجيه المستخدم إلى عنوان URL omniauth. بعد ذلك ، كل شيء حتى استلام أوراق الاعتماد خارج نطاق Zammad ويتم التعامل معه بواسطة omniauth.
ينشئ Omniauth عنوان URL ويعيد توجيه المستخدم بمعلمات OAuth2 المطلوبة إلى صفحة تسجيل الدخول المطابقة للمزود. هناك تتم المصادقة.
أحد معلمات omniauth هو عنوان URL لمعاودة الاتصال. بعد الانتهاء من المصادقة ، تتم إعادة توجيه المستخدم إلى عنوان URL هذا بواسطة المزود. تم تكوين عنوان URL لرد الاتصال في قائمة المسارات الخاصة بنا:
ينفق المسار الطلب إلى وحدة التحكم في الجلسات ، والتي تحاول تحديد المستخدم أو إنشائه إذا تعذر العثور عليه:
هذا ما تم القيام به هنا:
هذه المعلمات مطلوبة من قبل Zammad ويجب تقديمها من قبل المزود. المصادقة القائمة على الرمز المميز غير مدعومة.
أهلا!
أنا لا أفهم ردك.
لقد حاولت للتو:
! الإعدادات / الأمان -> إعداد Oauth2 العام. !
سير العمل هذا هو بالضبط كيف يجب أن يعتمد على الوثائق.
لا أفهم أين يجب أن نضع بيانات المستخدم.
مع دولة البارامز والرمز. (هذا هو رمز التفويض ، أليس كذلك؟)
هذه هي النقطة: يتوقع زمماد وجود بنية تجزئة تحتوي على بيانات المستخدم وليس كود مصادقة. يحتاج الهاش إلى البنية التالية:
https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/models/authorization.rb#L79
نقطتك 4. لم تحدث. Zammad لا ينفذ أي طلبات بعد نجاح تسجيل دخول OAuth.
نقطتك 4. لم تحدث. Zammad لا ينفذ أي طلبات بعد نجاح تسجيل دخول OAuth.
لكن النقطة 4 هي الطلب إلى TOKEN_URL والذي يحدث في سجلاتي؟
أتحدث عن تسجيل دخول المستخدم باستخدام oauth2.
response_type=code
غير مدعوم من قبل Zammad
ولكن هذا response_type=code
تم تعيينه بواسطة Zammad عندما أضغط على زر "Oauth2" في صفحة تسجيل الدخول؟
لم يتم تعيين ذلك من قبل مزود Oauth الخاص بي ؟؟
🤔 سآخذ نظرة
مرحبًا ThePatzen - آسف على التأخير. قضيت بعض الوقت مع جزء موفر OAuth2 ووجدت أن بعض الأشخاص لديهم مشكلة مشابهة جدًا مثلك: # 775
هل تستخدم أيضًا مجموعة أدوات Django OAuth2؟ هل الحل البديل المقدم من firlevapz هنا يناسبك أيضًا؟
انتظر ردك.
مرحبًا thorsteneckel - لا توجد مشكلة! لا ، أنا لا أستخدم مجموعة الأدوات هذه. لقد قمت بتطبيق OAuth2 الأصلي.
هل أفهم الحق. هذا الحل يغير كود zammad للقيام بطلب منفصل إلى / api / users / me للحصول على بيانات اعتماد المستخدم؟
حسنا أرى ذلك. نعم ، هذا بالضبط ما يفعله. أعتقد أن هذا يمكن أن يكون طريقة عامة لتذهب إليها إذا فهمت السيناريو الخاص بك بشكل صحيح. كما هو مذكور في العدد الآخر سنحاول إيصال ذلك إلى زماد. هل سيغطي حالتك إذا كان بإمكانك تكوين عنوان URL /api/users/me
لمزودك؟
ملاحظة: لطيفة - تنفيذها أصلية 🤓
من وجهة نظري ، تحتاج الوحدة النمطية OAuth2 إلى معلمة تكوين إضافية وهي "عنوان URL لبحث المستخدم".
يجب أيضًا تغيير /vendor/lib/oauth2_database.rb على النحو التالي:
class Oauth2Database < OmniAuth::Strategies::OAuth2
option :name, 'oauth2'
def initialize(app, *args, &block)
# database lookup
config = Setting.get('auth_oauth2_credentials') || {}
args[0] = config['app_id']
args[1] = config['app_secret']
args[2][:client_options] = args[2][:client_options].merge(config.symbolize_keys)
super
end
def callback_url
full_host + script_name + callback_path
end
uid { raw_info['id'] }
info do
{
email: raw_info['email'],
username: raw_info['username'],
login: raw_info['email'],
first_name: raw_info['first_name'],
last_name: raw_info['last_name'],
}
end
extra do
{
'raw_info' => raw_info
}
end
def raw_info
<strong i="7">@raw_info</strong> ||= access_token.get(config['user_info_url']).parsed
end
end
هل يعمل الرمز أعلاه في حالتك؟ هل اختبرت ذلك؟ سيكون من الرائع حل مشكلتك و # 775 بإستراتيجية مصادقة واحدة.
أهلا!
أنا حاليا خارج المكتب. سأختبر هذا غدًا وسأرد عليك بمجرد أن أفعل ذلك!
طمع من النمسا!
لا تقلق - نحن هنا 🤓 تحياتي إلى النمسا من برلين
أهلا! بهذه الطريقة يعمل تسجيل الدخول!
! ولكن !: يتم إنشاء حساب مستخدم جديد في كل مرة! لا يمكن تسجيل الدخول إلى ملف موجود بالفعل!
توصية:
أوصي أيضًا بتحسين التكوين بعدة مجالات:
أوصي بالكود التالي:
`فئة Oauth2Database <OmniAuth :: Strategies :: OAuth2
الخيار: الاسم ، "oauth2"
تهيئة def (app ، * args ، & block)
# البحث في قاعدة البيانات
config = Setting.get ('auth_oauth2_credentials') || {}
args [0] = التكوين ['app_id']
args [1] = التكوين ['app_secret']
args [2] [: client_options] = args [2] [: client_options] .merge (config.symbolize_keys)
ممتاز
نهاية
def callback_url
full_host + script_name + callback_path
نهاية
uid {raw_info [config ['user_info_id']]}
المعلومات تفعل
{
البريد الإلكتروني: raw_info [config ['user_info_email']] ،
اسم المستخدم: raw_info [config ['user_info_username']] ،
تسجيل الدخول: raw_info [config ['user_info_login']] ،
first_name: raw_info [config ['user_info_firstname']] ،
last_name: raw_info [config ['user_info_lastname']] ،
}
نهاية
القيام اضافية
{
'raw_info' => raw_info
}
نهاية
def raw_info
raw_info || = access_token.get (config ['user_info_url']).
نهاية
النهاية
ستحتاج إلى حقول التكوين التالية:
لطيف - جيد! شكرا على ملاحظاتك. لقد ألقيت نظرة أخرى على كود Omniauth ورمزنا. هل يمكنك التحقق مما إذا كان لديك إدخالات في جدول قاعدة البيانات authorizations
؟ يمكنك التحقق من ذلك إما عن طريق الوصول المباشر أو وحدة التحكم في ريلز Authorization.all
.
إذا لم يكن الأمر كذلك ، فربما تكون معلمة uid
مفقودة.
ناقشنا الموضوع وقررنا تمديد وإعادة تشكيل عنصر OAuth2 بأكمله. سيتضمن ذلك تنفيذ التكوينات التي أوصيت بها. ومع ذلك ، قد يستغرق هذا بعض الوقت لأن قائمتنا بها بعض المهام الأكثر إلحاحًا. سأقوم بإنشاء مشكلة منفصلة لهذا الأمر وأشير إلى هذه المشكلة هنا بعد ذلك.
أهلا!
نعم يوجد الآن إدخال في جدول التفويضات!
بالنسبة لي كل شيء يعمل الآن! (باستخدام الكود الذي تم تغييره)
:-) الجشع من إنسبروك ، النمسا :-)
لطيف - جيد! هل تمانع في نشر الحل الخاص بك هنا حتى يستفيد منه الآخرون / يمكننا التأكد من أن إعادة البناء لدينا قادرة على استبدال التخصيصات الخاصة بك؟
تحياتي إلى إنسبروك من برلين 🤙
أهلا! آسفة على ردي المتاخر! هذا هو الحل الخاص بي:
class Oauth2Database < OmniAuth::Strategies::OAuth2
option :name, 'oauth2'
def initialize(app, *args, &block)
# database lookup
config = Setting.get('auth_oauth2_credentials') || {}
args[0] = config['app_id']
args[1] = config['app_secret']
args[2][:client_options] = args[2][:client_options].merge(config.symbolize_keys)
super
end
def callback_url
full_host + script_name + callback_path
end
uid { raw_info['id'] }
info do
{
email: raw_info['email'],
username: raw_info['username'],
login: raw_info['login'],
first_name: raw_info['firstname'],
last_name: raw_info['lastname'],
}
end
extra do
{
'raw_info' => raw_info
}
end
def raw_info
<strong i="6">@raw_info</strong> ||= access_token.get('/api/me').parsed
end
end
يجب تعيين هذا كمحتوى للملف /vendor/lib/oauth2_database.rb!
يجب أن يقدم تطبيقك ردًا كـ url / api / me مع جميع الحقول المستخدمة في "raw_info".
إذا كانت هناك أي أسئلة من أي شخص ، فلا تتردد في طرحها :-)
نيييتس! شكرا @ ThePatzen! أعدت تنسيق الكود قليلاً. يغلق الآن. استمتع بمصادقة Zammad OAuth2 الجديدة اللامعة 🤓
مرحبًا يا شباب ، لدي نفس المشكلة في استخدام wso2is كخادم هوية. لا أفهم أن مسار "/ api / me" لا يستجيب على zammad ، نفس الشيء بالنسبة لـ "/ api / users / me" مثل الكتابة في المشكلات 775. على zammad renspond فقط "/ api / v1 / users / me" ولكن فقط إذا قمت بتسجيل الدخول ... ولكن في هذا القسم أعتقد أنني لم أسجل الدخول مرة أخرى ... يمكن لأي شخص مساعدتي من فضلك؟
اهلا ياجماعة!
لقد قمت بحل مشكلتي مع wso2is بتغيير def raw_info على النحو التالي:
def raw_info
<strong i="7">@raw_info</strong> ||= begin
uri = URI.parse('https://mywso2is/oauth2/userinfo?schema=openid')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer ' + access_token.token
response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
http.request(request)
end
JSON.parse(response.body)
end
end
التعليق الأكثر فائدة
اهلا ياجماعة!
لقد قمت بحل مشكلتي مع wso2is بتغيير def raw_info على النحو التالي: